Add agent engine BYOC support (#3885)

* feat(agent-engine): add support for container and custom image specs

- Add container_config to deployment_files.
- Add image_spec with build_args to source_config.
- Make agent_framework optional and document supported values.
- Implement dynamic specs for container and source deployments.
- Add examples and automated tests for new deployment types.

* chore: update Google provider version to 7.28.0 across modules

Mechanical update of versions.tf and versions.tofu files using tools/versions.py.

* feat(agent-engine): refactor for container deployments and API alignment

- Group deployment settings under 'deployment_config' (renamed from 'deployment_files').
- Support container-based deployments via 'container_config' and 'image_spec'.
- Refactor 'source_files_config' (renamed from 'source_config') to include mutually exclusive 'python_spec' and 'image_spec'.
- Support 'developer_connect_config' as a source code type.
- Group engine settings (framework, env, secrets) under 'agent_engine_config'.
- Add support for 'memory_bank_config' persistent memory.
- Overhaul reasoning engine resources with dynamic blocks to match provider schema.
- Update all documentation examples, add TOC, and refresh test inventories.

* Update dynamic python_spec block and related example yamls

* Ignore changes setting for developer_connect_source under lifecycle management

* fixing review comments for `try` and default path for `source_path`

---------

Co-authored-by: Hemanand <hemr@google.com>
Co-authored-by: Julio Castillo <jccb@google.com>
This commit is contained in:
Hemanand
2026-04-21 23:16:20 +05:30
committed by GitHub
parent c8886b4d88
commit eaa420534b
216 changed files with 1077 additions and 695 deletions

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -3,69 +3,35 @@
The module creates Agent Engine and related dependencies.
- It supports both source based deployments (aka in-line deployment) and serialized object deployment (aka pickle deployment).
- For serialized object deployment, it optionally creates a GCS storage bucket or can use an existing one and loads on it all your dependencies (`pickle`, `dependencies.tar.gz`, `requirements.txt`).
- Manages custom service accounts lifecycle.
- For serialized object deployment, the module creates a GCS bucket to store the pickled object and related dependencies.
- It supports Customer Managed Encryption Keys (CMEK) to encrypt both the reasoning engine and the GCS bucket.
- It provides support for both managed and unmanaged (Terraform doesn't track updates to code) deployments.
- It provides support for VPC-SC (via PSC-I).
- It provides support for custom and default service accounts.
- It provides support for environment variables and secrets from Secret Manager.
- It supports both Python-based and container-based deployments.
## TOC
<!-- BEGIN TOC -->
- [Source based deployment](#source-based-deployment)
- [Create the tar.gz package](#create-the-targz-package)
- [Minimal deployment](#minimal-deployment)
- [TOC](#toc)
- [Minimal deployment](#minimal-deployment)
- [Serialized Object Deployment](#serialized-object-deployment)
- [Unmanaged deployments](#unmanaged-deployments)
- [Unmanaged deployments](#unmanaged-deployments)
- [Service accounts](#service-accounts)
- [Private networking: setup PSC-I](#private-networking-setup-psc-i)
- [Specify an encryption key](#specify-an-encryption-key)
- [Define environment variables and use secrets](#define-environment-variables-and-use-secrets)
- [Container-based deployment](#container-based-deployment)
- [Memory Bank](#memory-bank)
- [Getting values from context](#getting-values-from-context)
- [Variables](#variables)
- [Outputs](#outputs)
<!-- END TOC -->
## Source based deployment
## Minimal deployment
The source based deployment is the newest, most efficient and easiest way to deploy your agents.
### Create the tar.gz package
First, create a *tar.gz* file with these files:
- The source Python file defining your agent, called `agent.py`.
- The `requirements.txt` file.
By default, the module expects the `tar.gz` file to be in the `src` subfolder and to be called `source.tar.gz`.
This is an example of an `agent.py` file for ADK:
```python
from google.adk.agents import LlmAgent
from vertexai.agent_engines import AdkApp
def get_exchange_rate(
currency_from: str = "USD",
currency_to: str = "EUR",
currency_date: str = "latest",
):
import requests
response = requests.get(
f"https://api.frankfurter.app/{currency_date}",
params={"from": currency_from, "to": currency_to},
)
return response.json()
root_agent = LlmAgent(
model="gemini-2.5-flash",
instruction="You are a helpful assistant",
name='currency_exchange_agent',
tools=[get_exchange_rate],
)
agent = AdkApp(agent=root_agent)
```
### Minimal deployment
You can now deploy the agent.
This example shows how to deploy an agent engine with minimal configuration, using source code from a local path.
```hcl
module "agent_engine" {
@@ -78,8 +44,8 @@ module "agent_engine" {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -87,7 +53,34 @@ module "agent_engine" {
# tftest inventory=minimal.yaml
```
You can change the name of the tar.gz package, of the requirement file, the name of the Python file and the name of the agent function by using the `deployment_files.source_config` variable.
You can change the name of the tar.gz package, of the requirement file, the name of the Python file and the name of the agent function by using the `deployment_config.source_files_config` variable.
You can also provide custom build arguments for the container image by using the `deployment_config.source_files_config.image_spec` variable.
```hcl
module "agent_engine" {
source = "./fabric/modules/agent-engine"
name = "my-agent"
project_id = var.project_id
region = var.region
agent_engine_config = {
agent_framework = "google-adk"
}
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
image_spec = {
build_args = {
"ENV" = "production"
}
}
}
}
}
# tftest inventory=image-spec.yaml
```
## Serialized Object Deployment
@@ -104,20 +97,18 @@ module "agent_engine" {
agent_framework = "google-adk"
}
deployment_files = {
deployment_config = {
package_config = {
dependencies_path = "assets/src/dependencies.tar.gz"
pickle_path = "assets/src/pickle.pkl"
dependencies_path = "assets/src/dependencies.tar.gz"
requirements_path = "assets/src/requirements.txt"
}
source_config = null
}
}
# tftest inventory=minimal-pickle.yaml
```
You may want to upload your files on the GCS bucket outside Terrafrom.
In this example, the module expects your package config files to be already present in the GCS bucket.
If the files are already in a GCS bucket, you can pass the GCS URIs to the module.
```hcl
module "agent_engine" {
@@ -130,28 +121,21 @@ module "agent_engine" {
agent_framework = "google-adk"
}
bucket_config = {
create = false
}
deployment_files = {
deployment_config = {
package_config = {
are_paths_local = false
dependencies_path = "dependencies.tar.gz"
pickle_path = "pickle.pkl"
requirements_path = "requirements.txt"
pickle_path = "gs://my-bucket/pickle.pkl"
dependencies_path = "gs://my-bucket/dependencies.tar.gz"
requirements_path = "gs://my-bucket/requirements.txt"
}
source_config = null
}
}
# tftest inventory=pickle-gcs.yaml
```
### Unmanaged deployments
## Unmanaged deployments
By default, this module tracks and controls code updates. This means you can only the agent code via Terraform.
Anyway, you may want to delegate this operation to third-party tools, outside Terraform.
To do so, deploy the first revision of your code by using the module (this can even be a hello world) and set `var.managed` to `false`.
If you want to use the module just to bootstrap the infrastructure and then manage the code updates yourself, you can set the `managed` variable to `false`.
```hcl
module "agent_engine" {
@@ -165,8 +149,8 @@ module "agent_engine" {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -176,11 +160,7 @@ module "agent_engine" {
## Service accounts
By default, the module creates a dedicated service account for your agent and grants it the roles needed to deploy the agent. The default roles are defined in `var.service_account_config.roles`. You can add more roles, as needed.
You can also use the default Agent Engine (Reasoning Engine) service agent.
In this case, it will be your responsibility to grant any other role needed to the service agent service account.
At the moment, you'll need at least to grant to it the `roles/viewer` role.
You can choose to use a custom service account or let the module create one for you.
```hcl
module "agent_engine" {
@@ -193,12 +173,8 @@ module "agent_engine" {
agent_framework = "google-adk"
}
service_account_config = {
create = false
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -206,7 +182,7 @@ module "agent_engine" {
# tftest inventory=sa-default.yaml
```
Alternatively, you can use an existing service account.
Using a custom service account.
```hcl
module "agent_engine" {
@@ -219,24 +195,22 @@ module "agent_engine" {
agent_framework = "google-adk"
}
service_account_config = {
create = false
email = "my-sa@${var.project_id}.iam.gserviceaccount.com"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
service_account_config = {
create = false
email = "my-agent@project-id.iam.gserviceaccount.com"
}
}
# tftest inventory=sa-custom.yaml
```
## Private networking: setup PSC-I
Your agent can privately access resources in your VPC. This is done with Private Service Connect Interface (PSC-I).
```hcl
module "agent_engine" {
source = "./fabric/modules/agent-engine"
@@ -248,74 +222,50 @@ module "agent_engine" {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
networking_config = {
network_attachment_id = google_compute_network_attachment.network_attachment.id
network_attachment_id = "projects/project-id/regions/europe-west8/networkAttachments/my-nat"
dns_peering_configs = {
"example.com" = {
target_network_name = "my-vpc-1"
}
"my-company.local" = {
target_network_name = "my-vpc-2"
target_project_id = "my-other-project"
"googleapis.com." = {
target_network_name = "my-network"
}
}
}
}
resource "google_compute_network_attachment" "network_attachment" {
name = "network-attachment"
project = var.project_id
region = var.region
description = "Network attachment for Agent Engine PSC-I"
connection_preference = "ACCEPT_MANUAL"
subnetworks = [var.subnet.self_link]
# Agent Engine SA automatically populates this when PSC-I is active.
# It adds the tenant project id.
lifecycle {
ignore_changes = [producer_accept_lists]
}
}
# tftest inventory=psc-i.yaml
```
## Specify an encryption key
You can optionally specify an existing encryption key, created in KMS.
To use KMS keys you'll need to grant the AI Platform Service Agent (`service-YOUR_PROJECT_NUMBER@gcp-sa-aiplatform-re.iam.gserviceaccount.com`) the `roles/cloudkms.cryptoKeyEncrypterDecrypter` role on the key.
```hcl
module "agent_engine" {
source = "./fabric/modules/agent-engine"
name = "my-agent"
project_id = var.project_id
region = var.region
encryption_key = "projects/${var.project_id}/locations/${var.region}/keyRings/my-keyring/cryptoKeys/my-key"
source = "./fabric/modules/agent-engine"
name = "my-agent"
project_id = var.project_id
region = var.region
agent_engine_config = {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
encryption_key = "projects/project-id/locations/europe-west8/keyRings/my-keyring/cryptoKeys/my-key"
}
# tftest inventory=encryption.yaml
```
## Define environment variables and use secrets
You can define environment variables and load existing secrets as environment variables into your agent.
```hcl
module "agent_engine" {
source = "./fabric/modules/agent-engine"
@@ -325,19 +275,18 @@ module "agent_engine" {
agent_engine_config = {
agent_framework = "google-adk"
environment_variables = {
FOO = "my-foo-variable"
FOO = "bar"
}
secret_environment_variables = {
BAR = {
secret_id = "projects/YOUR_PROJECT_NUMBER/secrets/my-bar-secret"
MY_SECRET = {
secret_id = "projects/project-id/secrets/my-secret"
}
}
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -345,6 +294,32 @@ module "agent_engine" {
# tftest inventory=environment.yaml
```
## Container-based deployment
You can deploy your agent as a custom Docker image.
```hcl
module "agent_engine" {
source = "./fabric/modules/agent-engine"
name = "my-agent"
project_id = var.project_id
region = var.region
agent_engine_config = {
environment_variables = {
FOO = "bar"
}
}
deployment_config = {
container_config = {
image_uri = "us-central1-docker.pkg.dev/my-project/my-repo/my-image:latest"
}
}
}
# tftest inventory=container.yaml
```
## Memory Bank
You can optionally configure a Memory Bank to provide long-term persistent memory for your agent.
@@ -360,8 +335,8 @@ module "agent_engine" {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -379,7 +354,6 @@ module "agent_engine" {
}
}
}
# tftest skip
```
## Getting values from context
@@ -395,8 +369,8 @@ module "agent_engine" {
agent_engine_config = {
agent_framework = "google-adk"
}
deployment_files = {
source_config = {
deployment_config = {
source_files_config = {
source_path = "assets/src/source.tar.gz"
}
}
@@ -443,18 +417,18 @@ module "agent_engine" {
| name | description | type | required | default |
|---|---|:---:|:---:|:---:|
| [agent_engine_config](variables.tf#L17) | The agent configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | ✓ | |
| [name](variables.tf#L148) | The name of the agent. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L167) | The id of the project where to deploy the agent. | <code>string</code> | ✓ | |
| [region](variables.tf#L173) | The region where to deploy the agent. | <code>string</code> | | |
| [bucket_config](variables.tf#L40) | The GCS bucket configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [context](variables.tf#L52) | Context-specific interpolations. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [deployment_files](variables.tf#L68) | The to source files path and names. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#8230;&#125;</code> |
| [description](variables.tf#L105) | The Agent Engine description. | <code>string</code> | | <code>&#34;Terraform managed.&#34;</code> |
| [encryption_key](variables.tf#L112) | The full resource name of the Cloud KMS CryptoKey. | <code>string</code> | | <code>null</code> |
| [managed](variables.tf#L118) | Whether the Terraform module should control the code updates. | <code>bool</code> | | <code>true</code> |
| [memory_bank_config](variables.tf#L125) | Configuration for the memory bank. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [networking_config](variables.tf#L154) | Networking configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [name](variables.tf#L172) | The name of the agent. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L191) | The id of the project where to deploy the agent. | <code>string</code> | ✓ | |
| [region](variables.tf#L197) | The region where to deploy the agent. | <code>string</code> | ✓ | |
| [agent_engine_config](variables.tf#L17) | The agent configuration. Supported values for agent_framework: 'google-adk', 'langchain', 'langgraph', 'ag2', 'llama-index', 'custom'. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [bucket_config](variables.tf#L41) | The GCS bucket configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [context](variables.tf#L53) | Context-specific interpolations. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [deployment_config](variables.tf#L69) | The deployment configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [description](variables.tf#L129) | The Agent Engine description. | <code>string</code> | | <code>&#34;Terraform managed.&#34;</code> |
| [encryption_key](variables.tf#L136) | The full resource name of the Cloud KMS CryptoKey. | <code>string</code> | | <code>null</code> |
| [managed](variables.tf#L142) | Whether the Terraform module should control the code updates. | <code>bool</code> | | <code>true</code> |
| [memory_bank_config](variables.tf#L149) | Configuration for the memory bank. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [networking_config](variables.tf#L178) | Networking configuration. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [service_account_config](variables-serviceaccount.tf#L18) | Service account configurations. | <code>object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
## Outputs

View File

@@ -120,42 +120,90 @@ resource "google_vertex_ai_reasoning_engine" "managed" {
}
}
dynamic "container_spec" {
for_each = var.deployment_config.container_config != null ? { 1 = 1 } : {}
content {
image_uri = var.deployment_config.container_config.image_uri
}
}
dynamic "package_spec" {
for_each = var.deployment_files.package_config != null ? { 1 = 1 } : {}
for_each = var.deployment_config.package_config != null ? { 1 = 1 } : {}
content {
python_version = var.agent_engine_config.python_version
dependency_files_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.dependencies[0].name}"
: var.deployment_files.package_config.dependencies_path
: var.deployment_config.package_config.dependencies_path
)
requirements_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.requirements[0].name}"
: var.deployment_files.package_config.requirements_path
: var.deployment_config.package_config.requirements_path
)
pickle_object_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.pickle[0].name}"
: var.deployment_files.package_config.pickle_path
: var.deployment_config.package_config.pickle_path
)
}
}
dynamic "source_code_spec" {
for_each = var.deployment_files.source_config != null ? { 1 = 1 } : {}
for_each = var.deployment_config.source_files_config != null ? { 1 = 1 } : {}
content {
inline_source {
source_archive = filebase64(var.deployment_files.source_config.source_path)
dynamic "inline_source" {
for_each = (
try(var.deployment_config.source_files_config.source_path, null) != null
? { 1 = 1 }
: {}
)
content {
source_archive = filebase64(var.deployment_config.source_files_config.source_path)
}
}
python_spec {
entrypoint_module = var.deployment_files.source_config.entrypoint_module
entrypoint_object = var.deployment_files.source_config.entrypoint_object
requirements_file = var.deployment_files.source_config.requirements_path
version = var.agent_engine_config.python_version
dynamic "developer_connect_source" {
for_each = (
try(var.deployment_config.source_files_config.developer_connect_config, null) != null
? { 1 = 1 }
: {}
)
content {
config {
git_repository_link = var.deployment_config.source_files_config.developer_connect_config.git_repository_link
dir = var.deployment_config.source_files_config.developer_connect_config.dir
revision = var.deployment_config.source_files_config.developer_connect_config.revision
}
}
}
dynamic "python_spec" {
for_each = (
try(var.deployment_config.source_files_config.python_spec, null) != null
? { 1 = 1 }
: {}
)
content {
entrypoint_module = var.deployment_config.source_files_config.python_spec.entrypoint_module
entrypoint_object = var.deployment_config.source_files_config.python_spec.entrypoint_object
requirements_file = var.deployment_config.source_files_config.python_spec.requirements_file
version = var.agent_engine_config.python_version
}
}
dynamic "image_spec" {
for_each = (
try(var.deployment_config.source_files_config.image_spec, null) != null
? { 1 = 1 }
: {}
)
content {
build_args = var.deployment_config.source_files_config.image_spec.build_args
}
}
}
}

View File

@@ -120,42 +120,90 @@ resource "google_vertex_ai_reasoning_engine" "unmanaged" {
}
}
dynamic "container_spec" {
for_each = var.deployment_config.container_config != null ? { 1 = 1 } : {}
content {
image_uri = var.deployment_config.container_config.image_uri
}
}
dynamic "package_spec" {
for_each = var.deployment_files.package_config == null ? {} : { 1 = 1 }
for_each = var.deployment_config.package_config != null ? { 1 = 1 } : {}
content {
python_version = var.agent_engine_config.python_version
dependency_files_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.dependencies[0].name}"
: var.deployment_files.package_config.dependencies_path
: var.deployment_config.package_config.dependencies_path
)
requirements_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.requirements[0].name}"
: var.deployment_files.package_config.requirements_path
: var.deployment_config.package_config.requirements_path
)
pickle_object_gcs_uri = (
var.deployment_files.package_config.are_paths_local
var.deployment_config.package_config.are_paths_local
? "gs://${local.bucket_name}/${google_storage_bucket_object.pickle[0].name}"
: var.deployment_files.package_config.pickle_path
: var.deployment_config.package_config.pickle_path
)
}
}
dynamic "source_code_spec" {
for_each = var.deployment_files.source_config == null ? {} : { 1 = 1 }
for_each = var.deployment_config.source_files_config != null ? { 1 = 1 } : {}
content {
inline_source {
source_archive = filebase64(var.deployment_files.source_config.source_path)
dynamic "inline_source" {
for_each = (
try(var.deployment_config.source_files_config.source_path, null) != null
? { 1 = 1 }
: {}
)
content {
source_archive = filebase64(var.deployment_config.source_files_config.source_path)
}
}
python_spec {
entrypoint_module = var.deployment_files.source_config.entrypoint_module
entrypoint_object = var.deployment_files.source_config.entrypoint_object
requirements_file = var.deployment_files.source_config.requirements_path
version = var.agent_engine_config.python_version
dynamic "developer_connect_source" {
for_each = (
try(var.deployment_config.source_files_config.developer_connect_config, null) != null
? { 1 = 1 }
: {}
)
content {
config {
git_repository_link = var.deployment_config.source_files_config.developer_connect_config.git_repository_link
dir = var.deployment_config.source_files_config.developer_connect_config.dir
revision = var.deployment_config.source_files_config.developer_connect_config.revision
}
}
}
dynamic "python_spec" {
for_each = (
try(var.deployment_config.source_files_config.python_spec, null) != null
? { 1 = 1 }
: {}
)
content {
entrypoint_module = var.deployment_config.source_files_config.python_spec.entrypoint_module
entrypoint_object = var.deployment_config.source_files_config.python_spec.entrypoint_object
requirements_file = var.deployment_config.source_files_config.python_spec.requirements_file
version = var.agent_engine_config.python_version
}
}
dynamic "image_spec" {
for_each = (
try(var.deployment_config.source_files_config.image_spec, null) != null
? { 1 = 1 }
: {}
)
content {
build_args = var.deployment_config.source_files_config.image_spec.build_args
}
}
}
}
@@ -228,8 +276,10 @@ resource "google_vertex_ai_reasoning_engine" "unmanaged" {
lifecycle {
ignore_changes = [
spec[0].container_spec,
spec[0].package_spec,
spec[0].source_code_spec[0].inline_source[0].source_archive
spec[0].source_code_spec[0].inline_source[0].source_archive,
spec[0].source_code_spec[0].developer_connect_source
]
}
}

View File

@@ -22,7 +22,7 @@ locals {
: try(google_vertex_ai_reasoning_engine.unmanaged[0], null)
)
bucket_name = (
var.deployment_files.package_config != null && var.bucket_config.create
var.deployment_config.package_config != null && var.bucket_config.create
? google_storage_bucket.default[0].name
: coalesce(var.bucket_config.name, var.name)
)
@@ -56,7 +56,7 @@ resource "time_sleep" "wait_5_minutes" {
resource "google_storage_bucket" "default" {
count = (
var.bucket_config.create
&& var.deployment_files.package_config != null
&& var.deployment_config.package_config != null
? 1 : 0
)
name = coalesce(var.bucket_config.name, var.name)
@@ -68,39 +68,45 @@ resource "google_storage_bucket" "default" {
resource "google_storage_bucket_object" "dependencies" {
count = (
var.deployment_files.package_config != null
&& var.deployment_files.package_config.are_paths_local ? 1 : 0
var.deployment_config.package_config != null
&& var.deployment_config.package_config.are_paths_local ? 1 : 0
)
name = "dependencies.tar.gz"
bucket = local.bucket_name
source = try(var.deployment_files.package_config.dependencies_path, null)
source_md5hash = filemd5(
try(var.deployment_files.package_config.dependencies_path, null)
source = try(var.deployment_config.package_config.dependencies_path, null)
source_md5hash = (
try(var.deployment_config.package_config.dependencies_path, null) == null
? null
: filemd5(var.deployment_config.package_config.dependencies_path)
)
}
resource "google_storage_bucket_object" "pickle" {
count = (
var.deployment_files.package_config != null
&& var.deployment_files.package_config.are_paths_local ? 1 : 0
var.deployment_config.package_config != null
&& var.deployment_config.package_config.are_paths_local ? 1 : 0
)
name = "pickle.pkl"
bucket = local.bucket_name
source = try(var.deployment_files.package_config.pickle_path, null)
source_md5hash = filemd5(
try(var.deployment_files.package_config.pickle_path)
source = try(var.deployment_config.package_config.pickle_path, null)
source_md5hash = (
try(var.deployment_config.package_config.pickle_path, null) == null
? null
: filemd5(var.deployment_config.package_config.pickle_path)
)
}
resource "google_storage_bucket_object" "requirements" {
count = (
var.deployment_files.package_config != null
&& var.deployment_files.package_config.are_paths_local ? 1 : 0
var.deployment_config.package_config != null
&& var.deployment_config.package_config.are_paths_local ? 1 : 0
)
name = "requirements.txt"
bucket = local.bucket_name
source = try(var.deployment_files.package_config.requirements_path, null)
source_md5hash = filemd5(
try(var.deployment_files.package_config.requirements_path)
source = try(var.deployment_config.package_config.requirements_path, null)
source_md5hash = (
try(var.deployment_config.package_config.requirements_path, null) == null
? null
: filemd5(var.deployment_config.package_config.requirements_path)
)
}

View File

@@ -15,10 +15,10 @@
*/
variable "agent_engine_config" {
description = "The agent configuration."
description = "The agent configuration. Supported values for agent_framework: 'google-adk', 'langchain', 'langgraph', 'ag2', 'llama-index', 'custom'."
type = object({
# Add validation once API stabilizes
agent_framework = string
agent_framework = optional(string)
class_methods = optional(string)
container_concurrency = optional(number)
environment_variables = optional(map(string), {})
@@ -35,6 +35,7 @@ variable "agent_engine_config" {
})), {})
})
nullable = false
default = {}
}
variable "bucket_config" {
@@ -65,40 +66,63 @@ variable "context" {
default = {}
}
variable "deployment_files" {
description = "The to source files path and names."
variable "deployment_config" {
description = "The deployment configuration."
type = object({
container_config = optional(object({
image_uri = string
}))
package_config = optional(object({
are_paths_local = optional(bool, true)
dependencies_path = optional(string, "./src/dependencies.tar.gz")
pickle_path = optional(string, "./src/pickle.pkl")
requirements_path = optional(string, "./src/requirements.txt")
}), null)
source_config = optional(object({
entrypoint_module = optional(string, "agent")
entrypoint_object = optional(string, "agent")
requirements_path = optional(string, "requirements.txt")
source_path = optional(string, "./src/source.tar.gz")
}), null)
}))
source_files_config = optional(object({
source_path = optional(string, "./src/source.tar.gz")
developer_connect_config = optional(object({
git_repository_link = string
dir = string
revision = string
}))
python_spec = optional(object({
entrypoint_module = optional(string, "agent")
entrypoint_object = optional(string, "agent")
requirements_file = optional(string, "requirements.txt")
}))
image_spec = optional(object({
build_args = optional(map(string), {})
}))
}))
})
nullable = false
default = {
package_config = null
source_config = {}
default = {}
validation {
condition = (
(var.deployment_config.container_config != null ? 1 : 0) +
(var.deployment_config.package_config != null ? 1 : 0) +
(var.deployment_config.source_files_config != null ? 1 : 0)
) <= 1
error_message = "You can provide at most one of 'container_config', 'package_config' or 'source_files_config'."
}
validation {
condition = (
var.deployment_files.package_config != null ||
var.deployment_files.source_config != null
var.deployment_config.source_files_config == null ? true : (
(var.deployment_config.source_files_config.source_path != null ? 1 : 0) +
(var.deployment_config.source_files_config.developer_connect_config != null ? 1 : 0)
) <= 1
)
error_message = "You must provide either 'package_config' or 'source_config'."
error_message = "Only one of 'source_path' or 'developer_connect_config' can be specified within 'source_files_config'."
}
validation {
condition = !(
var.deployment_files.package_config != null &&
var.deployment_files.source_config != null
condition = (
var.deployment_config.source_files_config == null ? true : (
(var.deployment_config.source_files_config.python_spec != null ? 1 : 0) +
(var.deployment_config.source_files_config.image_spec != null ? 1 : 0)
) <= 1
)
error_message = "You cannot specify both 'package_config' and 'source_config' simultaneously."
error_message = "Only one of 'python_spec' or 'image_spec' can be specified within 'source_files_config'."
}
}

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

View File

@@ -19,11 +19,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 7.27.0, < 8.0.0" # tftest
version = ">= 7.28.0, < 8.0.0" # tftest
}
}
provider_meta "google" {

Some files were not shown because too many files have changed in this diff Show More