Merge branch 'master' into lcaggioni/data-eng-fix

This commit is contained in:
Julio Castillo 2023-04-12 15:57:39 +02:00 committed by GitHub
commit 5e9b7091c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
119 changed files with 889 additions and 642 deletions

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -73,7 +73,7 @@ module "log-export-dataset" {
id = "${var.prefix}_audit_export"
friendly_name = "Audit logs export."
location = replace(var.log_locations.bq, "europe", "EU")
encryption_key = var.enable_features.encryption ? module.log-kms[var.log_locations.bq].keys["bq"].id : false
encryption_key = var.enable_features.encryption ? module.log-kms[var.log_locations.bq].keys["bq"].id : null
}
module "log-export-gcs" {

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -21,8 +21,8 @@ class TestUser(HttpUser):
host = os.getenv("URL", "http://nginx.sample.svc.cluster.local")
wait_time = between(int(os.getenv('MIN_WAIT_TIME'), 1),
int(os.getenv('MAX_WAIT_TIME'), 2))
wait_time = between(int(os.getenv('MIN_WAIT_TIME', 1)),
int(os.getenv('MAX_WAIT_TIME', 2)))
@task
def home(self):

View File

@ -24,6 +24,7 @@ module "gke-cluster" {
cluster_autoscaling = each.value.cluster_autoscaling
description = each.value.description
enable_features = each.value.enable_features
enable_addons = each.value.enable_addons
issue_client_certificate = each.value.issue_client_certificate
labels = each.value.labels
location = each.value.location

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -17,11 +17,11 @@ terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -70,18 +70,34 @@ case $STAGE_NAME in
exit 1
fi
unset GLOBALS
PROVIDER="providers/1-resman-tenant-providers.tf"
TFVARS="tfvars/0-bootstrap-tenant.auto.tfvars.json"
PROVIDER="tenants/$TENANT/providers/1-resman-tenant-providers.tf"
TFVARS="tenants/$TENANT/tfvars/0-bootstrap-tenant.auto.tfvars.json"
;;
"2-networking"*)
PROVIDER="providers/2-networking-providers.tf"
TFVARS="tfvars/0-bootstrap.auto.tfvars.json
tfvars/1-resman.auto.tfvars.json"
if [[ -z "$TENANT" ]]; then
echo "# if this is a tenant stage, set a \$TENANT variable with the tenant shortname and run the command again"
PROVIDER="providers/2-networking-providers.tf"
TFVARS="tfvars/0-bootstrap.auto.tfvars.json
tfvars/1-resman.auto.tfvars.json"
else
unset GLOBALS
PROVIDER="tenants/$TENANT/providers/2-networking-providers.tf"
TFVARS="tenants/$TENANT/tfvars/0-bootstrap-tenant.auto.tfvars.json
tenants/$TENANT/tfvars/1-resman.auto.tfvars.json"
fi
;;
"2-security"*)
PROVIDER="providers/2-security-providers.tf"
TFVARS="tfvars/0-bootstrap.auto.tfvars.json
tfvars/1-resman.auto.tfvars.json"
if [[ -z "$TENANT" ]]; then
echo "# if this is a tenant stage, set a \$TENANT variable with the tenant shortname and run the command again"
PROVIDER="providers/2-security-providers.tf"
TFVARS="tfvars/0-bootstrap.auto.tfvars.json
tfvars/1-resman.auto.tfvars.json"
else
unset GLOBALS
PROVIDER="tenants/$TENANT/providers/2-security-providers.tf"
TFVARS="tenants/$TENANT/tfvars/0-bootstrap-tenant.auto.tfvars.json
tenants/$TENANT/tfvars/1-resman.auto.tfvars.json"
fi
;;
*)
# check for a "dev" stage 3

View File

@ -52,7 +52,9 @@ As most of the features of this stage follow the same design and configurations
## Naming
This stage sets the prefix used to name tenant resources, and passes it downstream to the other tenant stages together with the other globals needed by the tenant. The default is to append the tenant short name (a 3 or 4 letter acronym or abbreviation) to the organization-level prefix, if that is not desired this can be changed by editing local definitions in the `main.tf` file. Just be aware that some resources have name length constraints.
This stage sets the prefix used to name tenant resources, and passes it downstream to the other tenant stages together with the other globals needed by the tenant. The default is to append the tenant short name (an acronym or abbreviation with a minimum of 2 and a maximum of 4 characters) to the organization-level prefix. If that is not desired this can be changed by editing local definitions in the `main.tf` file. Just be aware that some resources have name length constraints.
Note that if the organization-level prefix contains 9 characters then the tenant-level prefix will be limited to 2 characters. Use a shorter organization-level prefix if you want to use a longer tenant-level prefix.
## How to run this stage
@ -89,7 +91,7 @@ outputs_location = "~/fast-config"
### Global overrides
The globals variable file linekd above contains definition which were set for the organization, for example the locations used for log sink destinations. These might not be correct for each tenant, so this stage allows overriding them via the tenant configuration variable described in the next section.
The globals variable file linked above contains definition which were set for the organization, for example the locations used for log sink destinations. These might not be correct for each tenant, so this stage allows overriding them via the tenant configuration variable described in the next section.
### Tenant-level configuration

View File

@ -229,8 +229,8 @@ variable "prefix" {
type = string
validation {
condition = try(length(var.prefix), 0) < 10
error_message = "Use a maximum of 9 characters for prefix."
condition = try(length(var.prefix), 0) < 13
error_message = "Use a maximum of 12 characters for prefix (which is a combination of org prefix and tenant short name)."
}
}

View File

@ -90,7 +90,8 @@ We are intentionally not supporting random prefix/suffixes for names, as that is
What is implemented here is a fairly common convention, composed of tokens ordered by relative importance:
- a static prefix less or equal to 9 characters (e.g. `myco` or `myco-gcp`)
- an organization-level static prefix less or equal to 9 characters (e.g. `myco` or `myco-gcp`)
- an optional tenant-level prefix, if using multitenant stages
- an environment identifier (e.g. `prod`)
- a team/owner identifier (e.g. `sec` for Security)
- a context identifier (e.g. `core` or `kms`)
@ -208,7 +209,11 @@ Then make sure you have configured the correct values for the following variable
- `organization.id`, `organization.domain`, `organization.customer_id`
the id, domain and customer id of your organization, derived from the Cloud Console UI or by running `gcloud organizations list`
- `prefix`
the fixed prefix used in your naming, maximum 9 characters long
the fixed org-level prefix used in your naming, maximum 9 characters long. Note that if you are using multitenant stages, then you will later need to configure a `tenant prefix`.
This `tenant prefix` can have a maximum length of 2 characters,
plus any unused characters from the from the `prefix`.
For example, if you specify a `prefix` that is 7 characters long,
then your `tenant prefix` can have a maximum of 4 characters.
You can also adapt the example that follows to your needs:

View File

@ -44,7 +44,7 @@ Implemented via separate stages that configure separate FAST-enabled hierarchie
## Environment-level resources (3)
- [Project Factory](3-project-factory/dev/)
YAML-based fatory to create and configure application or team-level projects. Configuration includes VPC-level settings for Shared VPC, service-level configuration for CMEK encryption via centralized keys, and service account creation for workloads and applications. This stage is meant to be used once per environment.
YAML-based factory to create and configure application or team-level projects. Configuration includes VPC-level settings for Shared VPC, service-level configuration for CMEK encryption via centralized keys, and service account creation for workloads and applications. This stage is meant to be used once per environment.
- [Data Platform](3-data-platform/dev/)
- [GKE Multitenant](3-gke-multitenant/dev/)
- GCE Migration (in development)

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -259,6 +259,7 @@ resource "google_cloud_run_service" "service" {
metadata {
annotations = local.annotations
labels = var.labels
}
dynamic "traffic" {

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -22,7 +22,7 @@ module "firewall" {
admin_ranges = ["10.0.0.0/8"]
}
}
# tftest modules=1 resources=4
# tftest modules=1 resources=4 inventory=basic.yaml
```
### Custom rules
@ -77,7 +77,7 @@ module "firewall" {
}
}
}
# tftest modules=1 resources=9
# tftest modules=1 resources=9 inventory=custom-rules.yaml
```
### Controlling or turning off default rules
@ -103,7 +103,7 @@ module "firewall" {
ssh_tags = ["ssh-default"]
}
}
# tftest modules=1 resources=3
# tftest modules=1 resources=3 inventory=custom-ssh-default-rule.yaml
```
#### Disabling predefined rules
@ -119,7 +119,7 @@ module "firewall" {
ssh_ranges = []
}
}
# tftest modules=1 resources=2
# tftest modules=1 resources=2 inventory=no-ssh-default-rules.yaml
```
Or the entire set of rules can be disabled via the `disabled` attribute:
@ -133,7 +133,37 @@ module "firewall" {
disabled = true
}
}
# tftest modules=0 resources=0
# tftest modules=0 resources=0 inventory=no-default-rules.yaml
```
### Including source & destination ranges
Custom rules now support including both source & destination ranges in ingress and egress rules:
```hcl
module "firewall" {
source = "./fabric/modules/net-vpc-firewall"
project_id = "my-project"
network = "my-network"
default_rules_config = {
disabled = true
}
egress_rules = {
deny-egress-source-destination-ranges = {
description = "Deny egress using source and destination ranges"
source_ranges = ["10.132.0.0/20", "10.138.0.0/20"]
destination_ranges = ["172.16.0.0/12"]
}
}
ingress_rules = {
allow-ingress-source-destination-ranges = {
description = "Allow ingress using source and destination ranges"
source_ranges = ["172.16.0.0/12"]
destination_ranges = ["10.132.0.0/20", "10.138.0.0/20"]
}
}
}
# tftest modules=1 resources=2 inventory=local-ranges.yaml
```
### Rules Factory
@ -151,7 +181,7 @@ module "firewall" {
}
default_rules_config = { disabled = true }
}
# tftest modules=1 resources=3 files=lbs,cidrs
# tftest modules=1 resources=3 files=lbs,cidrs inventory=factory.yaml
```
```yaml
@ -202,13 +232,13 @@ healthchecks:
| name | description | type | required | default |
|---|---|:---:|:---:|:---:|
| [network](variables.tf#L108) | Name of the network this set of firewall rules applies to. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L113) | Project id of the project that holds the network. | <code>string</code> | ✓ | |
| [network](variables.tf#L110) | Name of the network this set of firewall rules applies to. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L115) | Project id of the project that holds the network. | <code>string</code> | ✓ | |
| [default_rules_config](variables.tf#L17) | Optionally created convenience rules. Set the 'disabled' attribute to true, or individual rule attributes to empty lists to disable. | <code title="object&#40;&#123;&#10; admin_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; disabled &#61; optional&#40;bool, false&#41;&#10; http_ranges &#61; optional&#40;list&#40;string&#41;, &#91;&#10; &#34;35.191.0.0&#47;16&#34;, &#34;130.211.0.0&#47;22&#34;, &#34;209.85.152.0&#47;22&#34;, &#34;209.85.204.0&#47;22&#34;&#93;&#10; &#41;&#10; http_tags &#61; optional&#40;list&#40;string&#41;, &#91;&#34;http-server&#34;&#93;&#41;&#10; https_ranges &#61; optional&#40;list&#40;string&#41;, &#91;&#10; &#34;35.191.0.0&#47;16&#34;, &#34;130.211.0.0&#47;22&#34;, &#34;209.85.152.0&#47;22&#34;, &#34;209.85.204.0&#47;22&#34;&#93;&#10; &#41;&#10; https_tags &#61; optional&#40;list&#40;string&#41;, &#91;&#34;https-server&#34;&#93;&#41;&#10; ssh_ranges &#61; optional&#40;list&#40;string&#41;, &#91;&#34;35.235.240.0&#47;20&#34;&#93;&#41;&#10; ssh_tags &#61; optional&#40;list&#40;string&#41;, &#91;&#34;ssh&#34;&#93;&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>&#123;&#125;</code> |
| [egress_rules](variables.tf#L37) | List of egress rule definitions, default to deny action. Null destination ranges will be replaced with 0/0. | <code title="map&#40;object&#40;&#123;&#10; deny &#61; optional&#40;bool, true&#41;&#10; description &#61; optional&#40;string&#41;&#10; destination_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; disabled &#61; optional&#40;bool, false&#41;&#10; enable_logging &#61; optional&#40;object&#40;&#123;&#10; include_metadata &#61; optional&#40;bool&#41;&#10; &#125;&#41;&#41;&#10; priority &#61; optional&#40;number, 1000&#41;&#10; targets &#61; optional&#40;list&#40;string&#41;&#41;&#10; use_service_accounts &#61; optional&#40;bool, false&#41;&#10; rules &#61; optional&#40;list&#40;object&#40;&#123;&#10; protocol &#61; string&#10; ports &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;, &#91;&#123; protocol &#61; &#34;all&#34; &#125;&#93;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [factories_config](variables.tf#L59) | Paths to data files and folders that enable factory functionality. | <code title="object&#40;&#123;&#10; cidr_tpl_file &#61; optional&#40;string&#41;&#10; rules_folder &#61; string&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [ingress_rules](variables.tf#L68) | List of ingress rule definitions, default to allow action. Null source ranges will be replaced with 0/0. | <code title="map&#40;object&#40;&#123;&#10; deny &#61; optional&#40;bool, false&#41;&#10; description &#61; optional&#40;string&#41;&#10; disabled &#61; optional&#40;bool, false&#41;&#10; enable_logging &#61; optional&#40;object&#40;&#123;&#10; include_metadata &#61; optional&#40;bool&#41;&#10; &#125;&#41;&#41;&#10; priority &#61; optional&#40;number, 1000&#41;&#10; source_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; sources &#61; optional&#40;list&#40;string&#41;&#41;&#10; targets &#61; optional&#40;list&#40;string&#41;&#41;&#10; use_service_accounts &#61; optional&#40;bool, false&#41;&#10; rules &#61; optional&#40;list&#40;object&#40;&#123;&#10; protocol &#61; string&#10; ports &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;, &#91;&#123; protocol &#61; &#34;all&#34; &#125;&#93;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [named_ranges](variables.tf#L91) | Define mapping of names to ranges that can be used in custom rules. | <code>map&#40;list&#40;string&#41;&#41;</code> | | <code title="&#123;&#10; any &#61; &#91;&#34;0.0.0.0&#47;0&#34;&#93;&#10; dns-forwarders &#61; &#91;&#34;35.199.192.0&#47;19&#34;&#93;&#10; health-checkers &#61; &#91;&#10; &#34;35.191.0.0&#47;16&#34;, &#34;130.211.0.0&#47;22&#34;, &#34;209.85.152.0&#47;22&#34;, &#34;209.85.204.0&#47;22&#34;&#10; &#93;&#10; iap-forwarders &#61; &#91;&#34;35.235.240.0&#47;20&#34;&#93;&#10; private-googleapis &#61; &#91;&#34;199.36.153.8&#47;30&#34;&#93;&#10; restricted-googleapis &#61; &#91;&#34;199.36.153.4&#47;30&#34;&#93;&#10; rfc1918 &#61; &#91;&#34;10.0.0.0&#47;8&#34;, &#34;172.16.0.0&#47;12&#34;, &#34;192.168.0.0&#47;16&#34;&#93;&#10;&#125;">&#123;&#8230;&#125;</code> |
| [egress_rules](variables.tf#L37) | List of egress rule definitions, default to deny action. Null destination ranges will be replaced with 0/0. | <code title="map&#40;object&#40;&#123;&#10; deny &#61; optional&#40;bool, true&#41;&#10; description &#61; optional&#40;string&#41;&#10; destination_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; disabled &#61; optional&#40;bool, false&#41;&#10; enable_logging &#61; optional&#40;object&#40;&#123;&#10; include_metadata &#61; optional&#40;bool&#41;&#10; &#125;&#41;&#41;&#10; priority &#61; optional&#40;number, 1000&#41;&#10; source_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; targets &#61; optional&#40;list&#40;string&#41;&#41;&#10; use_service_accounts &#61; optional&#40;bool, false&#41;&#10; rules &#61; optional&#40;list&#40;object&#40;&#123;&#10; protocol &#61; string&#10; ports &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;, &#91;&#123; protocol &#61; &#34;all&#34; &#125;&#93;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [factories_config](variables.tf#L60) | Paths to data files and folders that enable factory functionality. | <code title="object&#40;&#123;&#10; cidr_tpl_file &#61; optional&#40;string&#41;&#10; rules_folder &#61; string&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [ingress_rules](variables.tf#L69) | List of ingress rule definitions, default to allow action. Null source ranges will be replaced with 0/0. | <code title="map&#40;object&#40;&#123;&#10; deny &#61; optional&#40;bool, false&#41;&#10; description &#61; optional&#40;string&#41;&#10; destination_ranges &#61; optional&#40;list&#40;string&#41;, &#91;&#93;&#41; &#35; empty list is needed as default to allow deletion after initial creation with a value. See https:&#47;&#47;github.com&#47;hashicorp&#47;terraform-provider-google&#47;issues&#47;14270&#10; disabled &#61; optional&#40;bool, false&#41;&#10; enable_logging &#61; optional&#40;object&#40;&#123;&#10; include_metadata &#61; optional&#40;bool&#41;&#10; &#125;&#41;&#41;&#10; priority &#61; optional&#40;number, 1000&#41;&#10; source_ranges &#61; optional&#40;list&#40;string&#41;&#41;&#10; sources &#61; optional&#40;list&#40;string&#41;&#41;&#10; targets &#61; optional&#40;list&#40;string&#41;&#41;&#10; use_service_accounts &#61; optional&#40;bool, false&#41;&#10; rules &#61; optional&#40;list&#40;object&#40;&#123;&#10; protocol &#61; string&#10; ports &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;, &#91;&#123; protocol &#61; &#34;all&#34; &#125;&#93;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [named_ranges](variables.tf#L93) | Define mapping of names to ranges that can be used in custom rules. | <code>map&#40;list&#40;string&#41;&#41;</code> | | <code title="&#123;&#10; any &#61; &#91;&#34;0.0.0.0&#47;0&#34;&#93;&#10; dns-forwarders &#61; &#91;&#34;35.199.192.0&#47;19&#34;&#93;&#10; health-checkers &#61; &#91;&#10; &#34;35.191.0.0&#47;16&#34;, &#34;130.211.0.0&#47;22&#34;, &#34;209.85.152.0&#47;22&#34;, &#34;209.85.204.0&#47;22&#34;&#10; &#93;&#10; iap-forwarders &#61; &#91;&#34;35.235.240.0&#47;20&#34;&#93;&#10; private-googleapis &#61; &#91;&#34;199.36.153.8&#47;30&#34;&#93;&#10; restricted-googleapis &#61; &#91;&#34;199.36.153.4&#47;30&#34;&#93;&#10; rfc1918 &#61; &#91;&#34;10.0.0.0&#47;8&#34;, &#34;172.16.0.0&#47;12&#34;, &#34;192.168.0.0&#47;16&#34;&#93;&#10;&#125;">&#123;&#8230;&#125;</code> |
## Outputs

View File

@ -101,7 +101,8 @@ resource "google_compute_firewall" "custom-rules" {
? ["0.0.0.0/0"]
: each.value.source_ranges
)
: null
#for egress, we will include the source_ranges when provided. Previously, null was forced
: each.value.source_ranges
)
destination_ranges = (
each.value.direction == "EGRESS"
@ -110,7 +111,8 @@ resource "google_compute_firewall" "custom-rules" {
? ["0.0.0.0/0"]
: each.value.destination_ranges
)
: null
#for ingress, we will include the destination_ranges when provided. Previously, null was forced
: each.value.destination_ranges
)
source_tags = (
each.value.use_service_accounts || each.value.direction == "EGRESS"

View File

@ -45,6 +45,7 @@ variable "egress_rules" {
include_metadata = optional(bool)
}))
priority = optional(number, 1000)
source_ranges = optional(list(string))
targets = optional(list(string))
use_service_accounts = optional(bool, false)
rules = optional(list(object({
@ -68,9 +69,10 @@ variable "factories_config" {
variable "ingress_rules" {
description = "List of ingress rule definitions, default to allow action. Null source ranges will be replaced with 0/0."
type = map(object({
deny = optional(bool, false)
description = optional(string)
disabled = optional(bool, false)
deny = optional(bool, false)
description = optional(string)
destination_ranges = optional(list(string), []) # empty list is needed as default to allow deletion after initial creation with a value. See https://github.com/hashicorp/terraform-provider-google/issues/14270
disabled = optional(bool, false)
enable_logging = optional(object({
include_metadata = optional(bool)
}))

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -4,17 +4,22 @@ This module allows creation and management of VPC networks including subnetworks
## Examples
- [Simple VPC](#simple-vpc)
- [Subnet Options](#subnet-options)
- [Subnet IAM](#subnet-iam)
- [Peering](#peering)
- [Shared VPC](#shared-vpc)
- [Private Service Networking](#private-service-networking)
- [Private Service Networking with Peering Routes](#private-service-networking-with-peering-routes)
- [Subnets for Private Service Connect, Proxy-only subnets](#subnets-for-private-service-connect-proxy-only-subnets)
- [DNS Policies](#dns-policies)
- [Subnet Factory](#subnet-factory)
- [Custom Routes](#custom-routes)
- [VPC module](#vpc-module)
- [Examples](#examples)
- [Simple VPC](#simple-vpc)
- [Subnet Options](#subnet-options)
- [Subnet IAM](#subnet-iam)
- [Peering](#peering)
- [Shared VPC](#shared-vpc)
- [Private Service Networking](#private-service-networking)
- [Private Service Networking with peering routes](#private-service-networking-with-peering-routes)
- [Subnets for Private Service Connect, Proxy-only subnets](#subnets-for-private-service-connect-proxy-only-subnets)
- [DNS Policies](#dns-policies)
- [Subnet Factory](#subnet-factory)
- [Custom Routes](#custom-routes)
- [Allow Firewall Policy to be evaluated before Firewall Rules](#allow-firewall-policy-to-be-evaluated-before-firewall-rules)
- [Variables](#variables)
- [Outputs](#outputs)
### Simple VPC
@ -418,32 +423,61 @@ module "vpc" {
}
# tftest modules=5 resources=15 inventory=routes.yaml
```
### Allow Firewall Policy to be evaluated before Firewall Rules
```hcl
module "vpc" {
source = "./fabric/modules/net-vpc"
project_id = "my-project"
name = "my-network"
firewall_policy_enforcement_order = "BEFORE_CLASSIC_FIREWALL"
subnets = [
{
ip_cidr_range = "10.0.0.0/24"
name = "production"
region = "europe-west1"
secondary_ip_ranges = {
pods = "172.16.0.0/20"
services = "192.168.0.0/24"
}
},
{
ip_cidr_range = "10.0.16.0/24"
name = "production"
region = "europe-west2"
}
]
}
# tftest modules=1 resources=3 inventory=firewall_policy_enforcement_order.yaml
```
<!-- BEGIN TFDOC -->
## Variables
| name | description | type | required | default |
|---|---|:---:|:---:|:---:|
| [name](variables.tf#L60) | The name of the network being created. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L76) | The ID of the project where this VPC will be created. | <code>string</code> | ✓ | |
| [name](variables.tf#L72) | The name of the network being created. | <code>string</code> | ✓ | |
| [project_id](variables.tf#L88) | The ID of the project where this VPC will be created. | <code>string</code> | ✓ | |
| [auto_create_subnetworks](variables.tf#L17) | Set to true to create an auto mode subnet, defaults to custom mode. | <code>bool</code> | | <code>false</code> |
| [data_folder](variables.tf#L23) | An optional folder containing the subnet configurations in YaML format. | <code>string</code> | | <code>null</code> |
| [delete_default_routes_on_create](variables.tf#L29) | Set to true to delete the default routes at creation time. | <code>bool</code> | | <code>false</code> |
| [description](variables.tf#L35) | An optional description of this resource (triggers recreation on change). | <code>string</code> | | <code>&#34;Terraform-managed.&#34;</code> |
| [dns_policy](variables.tf#L41) | DNS policy setup for the VPC. | <code title="object&#40;&#123;&#10; inbound &#61; optional&#40;bool&#41;&#10; logging &#61; optional&#40;bool&#41;&#10; outbound &#61; optional&#40;object&#40;&#123;&#10; private_ns &#61; list&#40;string&#41;&#10; public_ns &#61; list&#40;string&#41;&#10; &#125;&#41;&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [mtu](variables.tf#L54) | Maximum Transmission Unit in bytes. The minimum value for this field is 1460 (the default) and the maximum value is 1500 bytes. | <code>number</code> | | <code>null</code> |
| [peering_config](variables.tf#L65) | VPC peering configuration. | <code title="object&#40;&#123;&#10; peer_vpc_self_link &#61; string&#10; create_remote_peer &#61; optional&#40;bool, true&#41;&#10; export_routes &#61; optional&#40;bool&#41;&#10; import_routes &#61; optional&#40;bool&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [psa_config](variables.tf#L81) | The Private Service Access configuration for Service Networking. | <code title="object&#40;&#123;&#10; ranges &#61; map&#40;string&#41;&#10; export_routes &#61; optional&#40;bool, false&#41;&#10; import_routes &#61; optional&#40;bool, false&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [routes](variables.tf#L91) | Network routes, keyed by name. | <code title="map&#40;object&#40;&#123;&#10; dest_range &#61; string&#10; next_hop_type &#61; string &#35; gateway, instance, ip, vpn_tunnel, ilb&#10; next_hop &#61; string&#10; priority &#61; optional&#40;number&#41;&#10; tags &#61; optional&#40;list&#40;string&#41;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [routing_mode](variables.tf#L111) | The network routing mode (default 'GLOBAL'). | <code>string</code> | | <code>&#34;GLOBAL&#34;</code> |
| [shared_vpc_host](variables.tf#L121) | Enable shared VPC for this project. | <code>bool</code> | | <code>false</code> |
| [shared_vpc_service_projects](variables.tf#L127) | Shared VPC service projects to register with this host. | <code>list&#40;string&#41;</code> | | <code>&#91;&#93;</code> |
| [subnet_iam](variables.tf#L133) | Subnet IAM bindings in {REGION/NAME => {ROLE => [MEMBERS]} format. | <code>map&#40;map&#40;list&#40;string&#41;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [subnet_iam_additive](variables.tf#L139) | Subnet IAM additive bindings in {REGION/NAME => {ROLE => [MEMBERS]}} format. | <code>map&#40;map&#40;list&#40;string&#41;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [subnets](variables.tf#L146) | Subnet configuration. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10; enable_private_access &#61; optional&#40;bool, true&#41;&#10; flow_logs_config &#61; optional&#40;object&#40;&#123;&#10; aggregation_interval &#61; optional&#40;string&#41;&#10; filter_expression &#61; optional&#40;string&#41;&#10; flow_sampling &#61; optional&#40;number&#41;&#10; metadata &#61; optional&#40;string&#41;&#10; metadata_fields &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;&#10; ipv6 &#61; optional&#40;object&#40;&#123;&#10; access_type &#61; optional&#40;string&#41;&#10; enable_private_access &#61; optional&#40;bool, true&#41;&#10; &#125;&#41;&#41;&#10; secondary_ip_ranges &#61; optional&#40;map&#40;string&#41;&#41;&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [subnets_proxy_only](variables.tf#L171) | List of proxy-only subnets for Regional HTTPS or Internal HTTPS load balancers. Note: Only one proxy-only subnet for each VPC network in each region can be active. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10; active &#61; bool&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [subnets_psc](variables.tf#L183) | List of subnets for Private Service Connect service producers. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [vpc_create](variables.tf#L194) | Create VPC. When set to false, uses a data source to reference existing VPC. | <code>bool</code> | | <code>true</code> |
| [firewall_policy_enforcement_order](variables.tf#L54) | Order that Firewall Rules and Firewall Policies are evaluated. Can be either 'BEFORE_CLASSIC_FIREWALL' or 'AFTER_CLASSIC_FIREWALL'. | <code>string</code> | | <code>&#34;AFTER_CLASSIC_FIREWALL&#34;</code> |
| [mtu](variables.tf#L66) | Maximum Transmission Unit in bytes. The minimum value for this field is 1460 (the default) and the maximum value is 1500 bytes. | <code>number</code> | | <code>null</code> |
| [peering_config](variables.tf#L77) | VPC peering configuration. | <code title="object&#40;&#123;&#10; peer_vpc_self_link &#61; string&#10; create_remote_peer &#61; optional&#40;bool, true&#41;&#10; export_routes &#61; optional&#40;bool&#41;&#10; import_routes &#61; optional&#40;bool&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [psa_config](variables.tf#L93) | The Private Service Access configuration for Service Networking. | <code title="object&#40;&#123;&#10; ranges &#61; map&#40;string&#41;&#10; export_routes &#61; optional&#40;bool, false&#41;&#10; import_routes &#61; optional&#40;bool, false&#41;&#10;&#125;&#41;">object&#40;&#123;&#8230;&#125;&#41;</code> | | <code>null</code> |
| [routes](variables.tf#L103) | Network routes, keyed by name. | <code title="map&#40;object&#40;&#123;&#10; dest_range &#61; string&#10; next_hop_type &#61; string &#35; gateway, instance, ip, vpn_tunnel, ilb&#10; next_hop &#61; string&#10; priority &#61; optional&#40;number&#41;&#10; tags &#61; optional&#40;list&#40;string&#41;&#41;&#10;&#125;&#41;&#41;">map&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [routing_mode](variables.tf#L123) | The network routing mode (default 'GLOBAL'). | <code>string</code> | | <code>&#34;GLOBAL&#34;</code> |
| [shared_vpc_host](variables.tf#L133) | Enable shared VPC for this project. | <code>bool</code> | | <code>false</code> |
| [shared_vpc_service_projects](variables.tf#L139) | Shared VPC service projects to register with this host. | <code>list&#40;string&#41;</code> | | <code>&#91;&#93;</code> |
| [subnet_iam](variables.tf#L145) | Subnet IAM bindings in {REGION/NAME => {ROLE => [MEMBERS]} format. | <code>map&#40;map&#40;list&#40;string&#41;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [subnet_iam_additive](variables.tf#L151) | Subnet IAM additive bindings in {REGION/NAME => {ROLE => [MEMBERS]}} format. | <code>map&#40;map&#40;list&#40;string&#41;&#41;&#41;</code> | | <code>&#123;&#125;</code> |
| [subnets](variables.tf#L158) | Subnet configuration. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10; enable_private_access &#61; optional&#40;bool, true&#41;&#10; flow_logs_config &#61; optional&#40;object&#40;&#123;&#10; aggregation_interval &#61; optional&#40;string&#41;&#10; filter_expression &#61; optional&#40;string&#41;&#10; flow_sampling &#61; optional&#40;number&#41;&#10; metadata &#61; optional&#40;string&#41;&#10; metadata_fields &#61; optional&#40;list&#40;string&#41;&#41;&#10; &#125;&#41;&#41;&#10; ipv6 &#61; optional&#40;object&#40;&#123;&#10; access_type &#61; optional&#40;string&#41;&#10; enable_private_access &#61; optional&#40;bool, true&#41;&#10; &#125;&#41;&#41;&#10; secondary_ip_ranges &#61; optional&#40;map&#40;string&#41;&#41;&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [subnets_proxy_only](variables.tf#L183) | List of proxy-only subnets for Regional HTTPS or Internal HTTPS load balancers. Note: Only one proxy-only subnet for each VPC network in each region can be active. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10; active &#61; bool&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [subnets_psc](variables.tf#L195) | List of subnets for Private Service Connect service producers. | <code title="list&#40;object&#40;&#123;&#10; name &#61; string&#10; ip_cidr_range &#61; string&#10; region &#61; string&#10; description &#61; optional&#40;string&#41;&#10;&#125;&#41;&#41;">list&#40;object&#40;&#123;&#8230;&#125;&#41;&#41;</code> | | <code>&#91;&#93;</code> |
| [vpc_create](variables.tf#L206) | Create VPC. When set to false, uses a data source to reference existing VPC. | <code>bool</code> | | <code>true</code> |
## Outputs

View File

@ -34,14 +34,15 @@ data "google_compute_network" "network" {
}
resource "google_compute_network" "network" {
count = var.vpc_create ? 1 : 0
project = var.project_id
name = var.name
description = var.description
auto_create_subnetworks = var.auto_create_subnetworks
delete_default_routes_on_create = var.delete_default_routes_on_create
mtu = var.mtu
routing_mode = var.routing_mode
count = var.vpc_create ? 1 : 0
project = var.project_id
name = var.name
description = var.description
auto_create_subnetworks = var.auto_create_subnetworks
delete_default_routes_on_create = var.delete_default_routes_on_create
mtu = var.mtu
routing_mode = var.routing_mode
network_firewall_policy_enforcement_order = var.firewall_policy_enforcement_order
}
resource "google_compute_network_peering" "local" {

View File

@ -51,6 +51,18 @@ variable "dns_policy" {
default = null
}
variable "firewall_policy_enforcement_order" {
description = "Order that Firewall Rules and Firewall Policies are evaluated. Can be either 'BEFORE_CLASSIC_FIREWALL' or 'AFTER_CLASSIC_FIREWALL'."
type = string
nullable = false
default = "AFTER_CLASSIC_FIREWALL"
validation {
condition = var.firewall_policy_enforcement_order == "BEFORE_CLASSIC_FIREWALL" || var.firewall_policy_enforcement_order == "AFTER_CLASSIC_FIREWALL"
error_message = "Enforcement order must be BEFORE_CLASSIC_FIREWALL or AFTER_CLASSIC_FIREWALL."
}
}
variable "mtu" {
description = "Maximum Transmission Unit in bytes. The minimum value for this field is 1460 (the default) and the maximum value is 1500 bytes."
type = number

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

View File

@ -13,15 +13,15 @@
# limitations under the License.
terraform {
required_version = ">= 1.3.1"
required_version = ">= 1.4.4"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
google-beta = {
source = "hashicorp/google-beta"
version = ">= 4.59.0" # tftest
version = ">= 4.60.0" # tftest
}
}
}

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