From 2ddce7b8fa1aa181641d95209949e807dc3757bb Mon Sep 17 00:00:00 2001 From: Julio Castillo Date: Wed, 20 Apr 2022 11:36:53 +0200 Subject: [PATCH 01/12] Fix gke-cluster permadiff when using dns_config --- modules/gke-cluster/README.md | 66 ++++++++++++++++---------------- modules/gke-cluster/main.tf | 9 ++--- modules/gke-cluster/variables.tf | 6 +-- 3 files changed, 38 insertions(+), 43 deletions(-) diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index 19a15a54a..4617cae07 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -68,44 +68,44 @@ module "cluster-1" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [location](variables.tf#L163) | Cluster zone or region. | string | ✓ | | -| [name](variables.tf#L230) | Cluster name. | string | ✓ | | -| [network](variables.tf#L235) | Name or self link of the VPC used for the cluster. Use the self link for Shared VPC. | string | ✓ | | -| [project_id](variables.tf#L279) | Cluster project id. | string | ✓ | | -| [secondary_range_pods](variables.tf#L302) | Subnet secondary range name used for pods. | string | ✓ | | -| [secondary_range_services](variables.tf#L307) | Subnet secondary range name used for services. | string | ✓ | | -| [subnetwork](variables.tf#L312) | VPC subnetwork name or self link. | string | ✓ | | +| [location](variables.tf#L159) | Cluster zone or region. | string | ✓ | | +| [name](variables.tf#L226) | Cluster name. | string | ✓ | | +| [network](variables.tf#L231) | Name or self link of the VPC used for the cluster. Use the self link for Shared VPC. | string | ✓ | | +| [project_id](variables.tf#L275) | Cluster project id. | string | ✓ | | +| [secondary_range_pods](variables.tf#L298) | Subnet secondary range name used for pods. | string | ✓ | | +| [secondary_range_services](variables.tf#L303) | Subnet secondary range name used for services. | string | ✓ | | +| [subnetwork](variables.tf#L308) | VPC subnetwork name or self link. | string | ✓ | | | [addons](variables.tf#L17) | Addons enabled in the cluster (true means enabled). | object({…}) | | {…} | | [authenticator_security_group](variables.tf#L51) | RBAC security group for Google Groups for GKE, format is gke-security-groups@yourdomain.com. | string | | null | | [cluster_autoscaling](variables.tf#L57) | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({…}) | | {…} | | [database_encryption](variables.tf#L75) | Enable and configure GKE application-layer secrets encryption. | object({…}) | | {…} | | [default_max_pods_per_node](variables.tf#L89) | Maximum number of pods per node in this cluster. | number | | 110 | | [description](variables.tf#L95) | Cluster description. | string | | null | -| [dns_config](variables.tf#L101) | Configuration for Using Cloud DNS for GKE. | object({…}) | | {…} | -| [enable_autopilot](variables.tf#L115) | Create cluster in autopilot mode. With autopilot there's no need to create node-pools and some features are not supported (e.g. setting default_max_pods_per_node). | bool | | false | -| [enable_binary_authorization](variables.tf#L121) | Enable Google Binary Authorization. | bool | | null | -| [enable_dataplane_v2](variables.tf#L127) | Enable Dataplane V2 on the cluster, will disable network_policy addons config. | bool | | false | -| [enable_intranode_visibility](variables.tf#L133) | Enable intra-node visibility to make same node pod to pod traffic visible. | bool | | null | -| [enable_l4_ilb_subsetting](variables.tf#L139) | Enable L4ILB Subsetting. | bool | | null | -| [enable_shielded_nodes](variables.tf#L145) | Enable Shielded Nodes features on all nodes in this cluster. | bool | | null | -| [enable_tpu](variables.tf#L151) | Enable Cloud TPU resources in this cluster. | bool | | null | -| [labels](variables.tf#L157) | Cluster resource labels. | map(string) | | null | -| [logging_config](variables.tf#L168) | Logging configuration (enabled components). | list(string) | | null | -| [logging_service](variables.tf#L174) | Logging service (disable with an empty string). | string | | "logging.googleapis.com/kubernetes" | -| [maintenance_config](variables.tf#L180) | Maintenance window configuration. | object({…}) | | {…} | -| [master_authorized_ranges](variables.tf#L206) | External Ip address ranges that can access the Kubernetes cluster master through HTTPS. | map(string) | | {} | -| [min_master_version](variables.tf#L212) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | -| [monitoring_config](variables.tf#L218) | Monitoring configuration (enabled components). | list(string) | | null | -| [monitoring_service](variables.tf#L224) | Monitoring service (disable with an empty string). | string | | "monitoring.googleapis.com/kubernetes" | -| [node_locations](variables.tf#L240) | Zones in which the cluster's nodes are located. | list(string) | | [] | -| [notification_config](variables.tf#L246) | GKE Cluster upgrade notifications via PubSub. | bool | | false | -| [peering_config](variables.tf#L252) | Configure peering with the master VPC for private clusters. | object({…}) | | null | -| [pod_security_policy](variables.tf#L262) | Enable the PodSecurityPolicy feature. | bool | | null | -| [private_cluster_config](variables.tf#L268) | Enable and configure private cluster, private nodes must be true if used. | object({…}) | | null | -| [release_channel](variables.tf#L284) | Release channel for GKE upgrades. | string | | null | -| [resource_usage_export_config](variables.tf#L290) | Configure the ResourceUsageExportConfig feature. | object({…}) | | {…} | -| [vertical_pod_autoscaling](variables.tf#L317) | Enable the Vertical Pod Autoscaling feature. | bool | | null | -| [workload_identity](variables.tf#L323) | Enable the Workload Identity feature. | bool | | true | +| [dns_config](variables.tf#L101) | Configuration for Using Cloud DNS for GKE. | object({…}) | | null | +| [enable_autopilot](variables.tf#L111) | Create cluster in autopilot mode. With autopilot there's no need to create node-pools and some features are not supported (e.g. setting default_max_pods_per_node). | bool | | false | +| [enable_binary_authorization](variables.tf#L117) | Enable Google Binary Authorization. | bool | | null | +| [enable_dataplane_v2](variables.tf#L123) | Enable Dataplane V2 on the cluster, will disable network_policy addons config. | bool | | false | +| [enable_intranode_visibility](variables.tf#L129) | Enable intra-node visibility to make same node pod to pod traffic visible. | bool | | null | +| [enable_l4_ilb_subsetting](variables.tf#L135) | Enable L4ILB Subsetting. | bool | | null | +| [enable_shielded_nodes](variables.tf#L141) | Enable Shielded Nodes features on all nodes in this cluster. | bool | | null | +| [enable_tpu](variables.tf#L147) | Enable Cloud TPU resources in this cluster. | bool | | null | +| [labels](variables.tf#L153) | Cluster resource labels. | map(string) | | null | +| [logging_config](variables.tf#L164) | Logging configuration (enabled components). | list(string) | | null | +| [logging_service](variables.tf#L170) | Logging service (disable with an empty string). | string | | "logging.googleapis.com/kubernetes" | +| [maintenance_config](variables.tf#L176) | Maintenance window configuration. | object({…}) | | {…} | +| [master_authorized_ranges](variables.tf#L202) | External Ip address ranges that can access the Kubernetes cluster master through HTTPS. | map(string) | | {} | +| [min_master_version](variables.tf#L208) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | +| [monitoring_config](variables.tf#L214) | Monitoring configuration (enabled components). | list(string) | | null | +| [monitoring_service](variables.tf#L220) | Monitoring service (disable with an empty string). | string | | "monitoring.googleapis.com/kubernetes" | +| [node_locations](variables.tf#L236) | Zones in which the cluster's nodes are located. | list(string) | | [] | +| [notification_config](variables.tf#L242) | GKE Cluster upgrade notifications via PubSub. | bool | | false | +| [peering_config](variables.tf#L248) | Configure peering with the master VPC for private clusters. | object({…}) | | null | +| [pod_security_policy](variables.tf#L258) | Enable the PodSecurityPolicy feature. | bool | | null | +| [private_cluster_config](variables.tf#L264) | Enable and configure private cluster, private nodes must be true if used. | object({…}) | | null | +| [release_channel](variables.tf#L280) | Release channel for GKE upgrades. | string | | null | +| [resource_usage_export_config](variables.tf#L286) | Configure the ResourceUsageExportConfig feature. | object({…}) | | {…} | +| [vertical_pod_autoscaling](variables.tf#L313) | Enable the Vertical Pod Autoscaling feature. | bool | | null | +| [workload_identity](variables.tf#L319) | Enable the Workload Identity feature. | bool | | true | ## Outputs @@ -121,4 +121,4 @@ module "cluster-1" { | [notifications](outputs.tf#L55) | GKE PubSub notifications topic. | | | [self_link](outputs.tf#L60) | Cluster self link. | ✓ | - \ No newline at end of file + diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index d8b5aff39..f82279bf6 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -278,12 +278,11 @@ resource "google_container_cluster" "cluster" { } dynamic "dns_config" { - for_each = var.dns_config != null ? [var.dns_config] : [] - iterator = config + for_each = var.dns_config != null ? [""] : [] content { - cluster_dns = config.value.cluster_dns - cluster_dns_scope = config.value.cluster_dns_scope - cluster_dns_domain = config.value.cluster_dns_domain + cluster_dns = var.dns_config.cluster_dns + cluster_dns_scope = var.dns_config.cluster_dns_scope + cluster_dns_domain = var.dns_config.cluster_dns_domain } } diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index d3043bda7..487aff532 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -105,11 +105,7 @@ variable "dns_config" { cluster_dns_scope = string cluster_dns_domain = string }) - default = { - cluster_dns = "PROVIDER_UNSPECIFIED" - cluster_dns_scope = "DNS_SCOPE_UNSPECIFIED" - cluster_dns_domain = "" - } + default = null } variable "enable_autopilot" { From e487f8d7314e9df9b8124c9d618716df6b98a616 Mon Sep 17 00:00:00 2001 From: Lorenzo Caggioni Date: Thu, 21 Apr 2022 23:53:16 +0200 Subject: [PATCH 02/12] Update naming convention --- .../{01-landing.tf => 01-dropoff.tf} | 58 +- .../data-platform-foundations/03-composer.tf | 66 +- .../{05-datalake.tf => 05-datawarehouse.tf} | 98 +- .../data-platform-foundations/IAM.md | 70 +- .../data-platform-foundations/README.md | 32 +- .../data-platform-foundations/demo/README.md | 8 +- .../demo/datapipeline.py | 81 +- .../demo/datapipeline_dc_tags.py | 112 +- .../demo/delete_table.py | 48 +- .../images/overview_diagram.png | Bin 71315 -> 51041 bytes .../data-platform-foundations/outputs.tf | 66 +- .../data-platform-foundations/state.json | 12142 ++++++++++++++++ fast/stages/03-data-platform/dev/README.md | 12 +- fast/stages/03-data-platform/dev/diagram.png | Bin 117820 -> 59453 bytes .../03-data-platform/dev/diagram_vpcsc.png | Bin 0 -> 34710 bytes 15 files changed, 12470 insertions(+), 323 deletions(-) rename examples/data-solutions/data-platform-foundations/{01-landing.tf => 01-dropoff.tf} (70%) rename examples/data-solutions/data-platform-foundations/{05-datalake.tf => 05-datawarehouse.tf} (74%) create mode 100644 examples/data-solutions/data-platform-foundations/state.json create mode 100644 fast/stages/03-data-platform/dev/diagram_vpcsc.png diff --git a/examples/data-solutions/data-platform-foundations/01-landing.tf b/examples/data-solutions/data-platform-foundations/01-dropoff.tf similarity index 70% rename from examples/data-solutions/data-platform-foundations/01-landing.tf rename to examples/data-solutions/data-platform-foundations/01-dropoff.tf index 49f32aff9..9a07b5171 100644 --- a/examples/data-solutions/data-platform-foundations/01-landing.tf +++ b/examples/data-solutions/data-platform-foundations/01-dropoff.tf @@ -12,20 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -# tfdoc:file:description land project and resources. +# tfdoc:file:description drop off project and resources. locals { - land_orch_service_accounts = [ + drop_orch_service_accounts = [ module.load-sa-df-0.iam_email, module.orch-sa-cmp-0.iam_email ] } -module "land-project" { +module "drop-project" { source = "../../../modules/project" parent = var.folder_id billing_account = var.billing_account_id prefix = var.prefix - name = "lnd${local.project_suffix}" + name = "drp${local.project_suffix}" group_iam = { (local.groups.data-engineers) = [ "roles/bigquery.dataEditor", @@ -34,14 +34,14 @@ module "land-project" { ] } iam = { - "roles/bigquery.dataEditor" = [module.land-sa-bq-0.iam_email] + "roles/bigquery.dataEditor" = [module.drop-sa-bq-0.iam_email] "roles/bigquery.user" = [module.load-sa-df-0.iam_email] - "roles/pubsub.publisher" = [module.land-sa-ps-0.iam_email] + "roles/pubsub.publisher" = [module.drop-sa-ps-0.iam_email] "roles/pubsub.subscriber" = concat( - local.land_orch_service_accounts, [module.load-sa-df-0.iam_email] + local.drop_orch_service_accounts, [module.load-sa-df-0.iam_email] ) "roles/storage.objectAdmin" = [module.load-sa-df-0.iam_email] - "roles/storage.objectCreator" = [module.land-sa-cs-0.iam_email] + "roles/storage.objectCreator" = [module.drop-sa-cs-0.iam_email] "roles/storage.objectViewer" = [module.orch-sa-cmp-0.iam_email] "roles/storage.admin" = [module.load-sa-df-0.iam_email] } @@ -63,12 +63,12 @@ module "land-project" { # Cloud Storage -module "land-sa-cs-0" { +module "drop-sa-cs-0" { source = "../../../modules/iam-service-account" - project_id = module.land-project.project_id + project_id = module.drop-project.project_id prefix = var.prefix - name = "lnd-cs-0" - display_name = "Data platform GCS landing service account." + name = "drp-cs-0" + display_name = "Data platform GCS drop off service account." iam = { "roles/iam.serviceAccountTokenCreator" = [ local.groups_iam.data-engineers @@ -76,11 +76,11 @@ module "land-sa-cs-0" { } } -module "land-cs-0" { +module "drop-cs-0" { source = "../../../modules/gcs" - project_id = module.land-project.project_id + project_id = module.drop-project.project_id prefix = var.prefix - name = "lnd-cs-0" + name = "drp-cs-0" location = var.location storage_class = "MULTI_REGIONAL" encryption_key = try(local.service_encryption_keys.storage, null) @@ -93,12 +93,12 @@ module "land-cs-0" { # PubSub -module "land-sa-ps-0" { +module "drop-sa-ps-0" { source = "../../../modules/iam-service-account" - project_id = module.land-project.project_id + project_id = module.drop-project.project_id prefix = var.prefix - name = "lnd-ps-0" - display_name = "Data platform PubSub landing service account" + name = "drp-ps-0" + display_name = "Data platform PubSub drop off service account" iam = { "roles/iam.serviceAccountTokenCreator" = [ local.groups_iam.data-engineers @@ -106,30 +106,30 @@ module "land-sa-ps-0" { } } -module "land-ps-0" { +module "drop-ps-0" { source = "../../../modules/pubsub" - project_id = module.land-project.project_id - name = "${var.prefix}-lnd-ps-0" + project_id = module.drop-project.project_id + name = "${var.prefix}-drp-ps-0" kms_key = try(local.service_encryption_keys.pubsub, null) } # BigQuery -module "land-sa-bq-0" { +module "drop-sa-bq-0" { source = "../../../modules/iam-service-account" - project_id = module.land-project.project_id + project_id = module.drop-project.project_id prefix = var.prefix - name = "lnd-bq-0" - display_name = "Data platform BigQuery landing service account" + name = "drp-bq-0" + display_name = "Data platform BigQuery drop off service account" iam = { "roles/iam.serviceAccountTokenCreator" = [local.groups_iam.data-engineers] } } -module "land-bq-0" { +module "drop-bq-0" { source = "../../../modules/bigquery-dataset" - project_id = module.land-project.project_id - id = "${replace(var.prefix, "-", "_")}lnd_bq_0" + project_id = module.drop-project.project_id + id = "${replace(var.prefix, "-", "_")}drp_bq_0" location = var.location encryption_key = try(local.service_encryption_keys.bq, null) } diff --git a/examples/data-solutions/data-platform-foundations/03-composer.tf b/examples/data-solutions/data-platform-foundations/03-composer.tf index fac47ec57..2622ffa20 100644 --- a/examples/data-solutions/data-platform-foundations/03-composer.tf +++ b/examples/data-solutions/data-platform-foundations/03-composer.tf @@ -66,39 +66,39 @@ resource "google_composer_environment" "orch-cmp-0" { image_version = var.composer_config.airflow_version env_variables = merge( var.composer_config.env_variables, { - BQ_LOCATION = var.location - DATA_CAT_TAGS = try(jsonencode(module.common-datacatalog.tags), "{}") - DF_KMS_KEY = try(var.service_encryption_keys.dataflow, "") - DTL_L0_PRJ = module.lake-0-project.project_id - DTL_L0_BQ_DATASET = module.lake-0-bq-0.dataset_id - DTL_L0_GCS = module.lake-0-cs-0.url - DTL_L1_PRJ = module.lake-1-project.project_id - DTL_L1_BQ_DATASET = module.lake-1-bq-0.dataset_id - DTL_L1_GCS = module.lake-1-cs-0.url - DTL_L2_PRJ = module.lake-2-project.project_id - DTL_L2_BQ_DATASET = module.lake-2-bq-0.dataset_id - DTL_L2_GCS = module.lake-2-cs-0.url - DTL_PLG_PRJ = module.lake-plg-project.project_id - DTL_PLG_BQ_DATASET = module.lake-plg-bq-0.dataset_id - DTL_PLG_GCS = module.lake-plg-cs-0.url - GCP_REGION = var.region - LND_PRJ = module.land-project.project_id - LND_BQ = module.land-bq-0.dataset_id - LND_GCS = module.land-cs-0.url - LND_PS = module.land-ps-0.id - LOD_PRJ = module.load-project.project_id - LOD_GCS_STAGING = module.load-cs-df-0.url - LOD_NET_VPC = local.load_vpc - LOD_NET_SUBNET = local.load_subnet - LOD_SA_DF = module.load-sa-df-0.email - ORC_PRJ = module.orch-project.project_id - ORC_GCS = module.orch-cs-0.url - TRF_PRJ = module.transf-project.project_id - TRF_GCS_STAGING = module.transf-cs-df-0.url - TRF_NET_VPC = local.transf_vpc - TRF_NET_SUBNET = local.transf_subnet - TRF_SA_DF = module.transf-sa-df-0.email - TRF_SA_BQ = module.transf-sa-bq-0.email + BQ_LOCATION = var.location + DATA_CAT_TAGS = try(jsonencode(module.common-datacatalog.tags), "{}") + DF_KMS_KEY = try(var.service_encryption_keys.dataflow, "") + DRP_PRJ = module.drop-project.project_id + DRP_BQ = module.drop-bq-0.dataset_id + DRP_GCS = module.drop-cs-0.url + DRP_PS = module.drop-ps-0.id + DWH_LAND_PRJ = module.dwh-lnd-project.project_id + DWH_LAND_BQ_DATASET = module.dwh-lnd-bq-0.dataset_id + DWH_LAND_GCS = module.dwh-lnd-cs-0.url + DWH_CURATED_PRJ = module.dwh-cur-project.project_id + DWH_CURATED_BQ_DATASET = module.dwh-cur-bq-0.dataset_id + DWH_CURATED_GCS = module.dwh-cur-cs-0.url + DWH_CONFIDENTIAL_PRJ = module.dwh-conf-project.project_id + DWH_CONFIDENTIAL_BQ_DATASET = module.dwh-conf-bq-0.dataset_id + DWH_CONFIDENTIAL_GCS = module.dwh-conf-cs-0.url + DWH_PLG_PRJ = module.dwh-plg-project.project_id + DWH_PLG_BQ_DATASET = module.dwh-plg-bq-0.dataset_id + DWH_PLG_GCS = module.dwh-plg-cs-0.url + GCP_REGION = var.region + LOD_PRJ = module.load-project.project_id + LOD_GCS_STAGING = module.load-cs-df-0.url + LOD_NET_VPC = local.load_vpc + LOD_NET_SUBNET = local.load_subnet + LOD_SA_DF = module.load-sa-df-0.email + ORC_PRJ = module.orch-project.project_id + ORC_GCS = module.orch-cs-0.url + TRF_PRJ = module.transf-project.project_id + TRF_GCS_STAGING = module.transf-cs-df-0.url + TRF_NET_VPC = local.transf_vpc + TRF_NET_SUBNET = local.transf_subnet + TRF_SA_DF = module.transf-sa-df-0.email + TRF_SA_BQ = module.transf-sa-bq-0.email } ) } diff --git a/examples/data-solutions/data-platform-foundations/05-datalake.tf b/examples/data-solutions/data-platform-foundations/05-datawarehouse.tf similarity index 74% rename from examples/data-solutions/data-platform-foundations/05-datalake.tf rename to examples/data-solutions/data-platform-foundations/05-datawarehouse.tf index b163f9e56..879a0e0b1 100644 --- a/examples/data-solutions/data-platform-foundations/05-datalake.tf +++ b/examples/data-solutions/data-platform-foundations/05-datawarehouse.tf @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# tfdoc:file:description Datalake projects. +# tfdoc:file:description Data Warehouse projects. locals { - lake_group_iam = { + dwh_group_iam = { (local.groups.data-engineers) = [ "roles/bigquery.dataEditor", "roles/storage.admin", @@ -30,7 +30,7 @@ locals { "roles/storage.objectViewer", ] } - lake_plg_group_iam = { + dwh_plg_group_iam = { (local.groups.data-engineers) = [ "roles/bigquery.dataEditor", "roles/storage.admin", @@ -45,7 +45,7 @@ locals { "roles/storage.objectAdmin", ] } - lake_0_iam = { + dwh_lnd_iam = { "roles/bigquery.dataOwner" = [ module.load-sa-df-0.iam_email, module.transf-sa-df-0.iam_email, @@ -61,7 +61,7 @@ locals { module.load-sa-df-0.iam_email, ] } - lake_iam = { + dwh_iam = { "roles/bigquery.dataOwner" = [ module.transf-sa-df-0.iam_email, module.transf-sa-bq-0.iam_email, @@ -79,7 +79,7 @@ locals { module.transf-sa-df-0.iam_email, ] } - lake_services = concat(var.project_services, [ + dwh_services = concat(var.project_services, [ "bigquery.googleapis.com", "bigqueryreservation.googleapis.com", "bigquerystorage.googleapis.com", @@ -95,60 +95,60 @@ locals { # Project -module "lake-0-project" { +module "dwh-lnd-project" { source = "../../../modules/project" parent = var.folder_id billing_account = var.billing_account_id prefix = var.prefix - name = "dtl-0${local.project_suffix}" - group_iam = local.lake_group_iam - iam = local.lake_0_iam - services = local.lake_services + name = "dwh-lnd${local.project_suffix}" + group_iam = local.dwh_group_iam + iam = local.dwh_lnd_iam + services = local.dwh_services service_encryption_key_ids = { bq = [try(local.service_encryption_keys.bq, null)] storage = [try(local.service_encryption_keys.storage, null)] } } -module "lake-1-project" { +module "dwh-cur-project" { source = "../../../modules/project" parent = var.folder_id billing_account = var.billing_account_id prefix = var.prefix - name = "dtl-1${local.project_suffix}" - group_iam = local.lake_group_iam - iam = local.lake_iam - services = local.lake_services + name = "dwh-cur${local.project_suffix}" + group_iam = local.dwh_group_iam + iam = local.dwh_iam + services = local.dwh_services service_encryption_key_ids = { bq = [try(local.service_encryption_keys.bq, null)] storage = [try(local.service_encryption_keys.storage, null)] } } -module "lake-2-project" { +module "dwh-conf-project" { source = "../../../modules/project" parent = var.folder_id billing_account = var.billing_account_id prefix = var.prefix - name = "dtl-2${local.project_suffix}" - group_iam = local.lake_group_iam - iam = local.lake_iam - services = local.lake_services + name = "dwh-conf${local.project_suffix}" + group_iam = local.dwh_group_iam + iam = local.dwh_iam + services = local.dwh_services service_encryption_key_ids = { bq = [try(local.service_encryption_keys.bq, null)] storage = [try(local.service_encryption_keys.storage, null)] } } -module "lake-plg-project" { +module "dwh-plg-project" { source = "../../../modules/project" parent = var.folder_id billing_account = var.billing_account_id prefix = var.prefix - name = "dtl-plg${local.project_suffix}" - group_iam = local.lake_plg_group_iam + name = "dwh-plg${local.project_suffix}" + group_iam = local.dwh_plg_group_iam iam = {} - services = local.lake_services + services = local.dwh_services service_encryption_key_ids = { bq = [try(local.service_encryption_keys.bq, null)] storage = [try(local.service_encryption_keys.storage, null)] @@ -157,78 +157,78 @@ module "lake-plg-project" { # Bigquery -module "lake-0-bq-0" { +module "dwh-lnd-bq-0" { source = "../../../modules/bigquery-dataset" - project_id = module.lake-0-project.project_id - id = "${replace(var.prefix, "-", "_")}_dtl_0_bq_0" + project_id = module.dwh-lnd-project.project_id + id = "${replace(var.prefix, "-", "_")}_dwh_lnd_bq_0" location = var.location encryption_key = try(local.service_encryption_keys.bq, null) } -module "lake-1-bq-0" { +module "dwh-cur-bq-0" { source = "../../../modules/bigquery-dataset" - project_id = module.lake-1-project.project_id - id = "${replace(var.prefix, "-", "_")}_dtl_1_bq_0" + project_id = module.dwh-cur-project.project_id + id = "${replace(var.prefix, "-", "_")}_dwh_lnd_bq_0" location = var.location encryption_key = try(local.service_encryption_keys.bq, null) } -module "lake-2-bq-0" { +module "dwh-conf-bq-0" { source = "../../../modules/bigquery-dataset" - project_id = module.lake-2-project.project_id - id = "${replace(var.prefix, "-", "_")}_dtl_2_bq_0" + project_id = module.dwh-conf-project.project_id + id = "${replace(var.prefix, "-", "_")}_dwh_conf_bq_0" location = var.location encryption_key = try(local.service_encryption_keys.bq, null) } -module "lake-plg-bq-0" { +module "dwh-plg-bq-0" { source = "../../../modules/bigquery-dataset" - project_id = module.lake-plg-project.project_id - id = "${replace(var.prefix, "-", "_")}_dtl_plg_bq_0" + project_id = module.dwh-plg-project.project_id + id = "${replace(var.prefix, "-", "_")}_dwh_plg_bq_0" location = var.location encryption_key = try(local.service_encryption_keys.bq, null) } # Cloud storage -module "lake-0-cs-0" { +module "dwh-lnd-cs-0" { source = "../../../modules/gcs" - project_id = module.lake-0-project.project_id + project_id = module.dwh-lnd-project.project_id prefix = var.prefix - name = "dtl-0-cs-0" + name = "dwh-lnd-cs-0" location = var.location storage_class = "MULTI_REGIONAL" encryption_key = try(local.service_encryption_keys.storage, null) force_destroy = var.data_force_destroy } -module "lake-1-cs-0" { +module "dwh-cur-cs-0" { source = "../../../modules/gcs" - project_id = module.lake-1-project.project_id + project_id = module.dwh-cur-project.project_id prefix = var.prefix - name = "dtl-1-cs-0" + name = "dwh-cur-cs-0" location = var.location storage_class = "MULTI_REGIONAL" encryption_key = try(local.service_encryption_keys.storage, null) force_destroy = var.data_force_destroy } -module "lake-2-cs-0" { +module "dwh-conf-cs-0" { source = "../../../modules/gcs" - project_id = module.lake-2-project.project_id + project_id = module.dwh-conf-project.project_id prefix = var.prefix - name = "dtl-2-cs-0" + name = "dwh-conf-cs-0" location = var.location storage_class = "MULTI_REGIONAL" encryption_key = try(local.service_encryption_keys.storage, null) force_destroy = var.data_force_destroy } -module "lake-plg-cs-0" { +module "dwh-plg-cs-0" { source = "../../../modules/gcs" - project_id = module.lake-plg-project.project_id + project_id = module.dwh-plg-project.project_id prefix = var.prefix - name = "dtl-plg-cs-0" + name = "dwh-plg-cs-0" location = var.location storage_class = "MULTI_REGIONAL" encryption_key = try(local.service_encryption_keys.storage, null) diff --git a/examples/data-solutions/data-platform-foundations/IAM.md b/examples/data-solutions/data-platform-foundations/IAM.md index d6ccbecbc..54d35939b 100644 --- a/examples/data-solutions/data-platform-foundations/IAM.md +++ b/examples/data-solutions/data-platform-foundations/IAM.md @@ -13,7 +13,40 @@ Legend: + additive, conditional. |trf-bq-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | |trf-df-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | -## Project dtl-0 +## Project drp + +| members | roles | +|---|---| +|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/pubsub.editor](https://cloud.google.com/iam/docs/understanding-roles#pubsub.editor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | +|drp-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | +|drp-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | +|drp-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | +|load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | + +## Project dwh-conf + +| members | roles | +|---|---| +|gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | +|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| +|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | + +## Project dwh-cur + +| members | roles | +|---|---| +|gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | +|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| +|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | + +## Project dwh-lnd | members | roles | |---|---| @@ -24,29 +57,7 @@ Legend: + additive, conditional. |trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | |trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner) | -## Project dtl-1 - -| members | roles | -|---|---| -|gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | - -## Project dtl-2 - -| members | roles | -|---|---| -|gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | - -## Project dtl-plg +## Project dwh-plg | members | roles | |---|---| @@ -54,17 +65,6 @@ Legend: + additive, conditional. |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -## Project lnd - -| members | roles | -|---|---| -|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/pubsub.editor](https://cloud.google.com/iam/docs/understanding-roles#pubsub.editor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|lnd-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | -|lnd-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | -|lnd-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | -|load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | - ## Project lod | members | roles | diff --git a/examples/data-solutions/data-platform-foundations/README.md b/examples/data-solutions/data-platform-foundations/README.md index 09f8e63a5..2ac1a9871 100644 --- a/examples/data-solutions/data-platform-foundations/README.md +++ b/examples/data-solutions/data-platform-foundations/README.md @@ -27,9 +27,9 @@ The code in this example doesn't address Organization-level configurations (Orga The Data Platform is designed to rely on several projects, one project per data stage. The stages identified are: -- landing +- drop off - load -- data lake +- data warehouse - orchestration - transformation - exposure @@ -38,15 +38,15 @@ This separation into projects allows adhering to the least-privilege principle b The script will create the following projects: -- **Landing** Used to store temporary data. Data is pushed to Cloud Storage, BigQuery, or Cloud PubSub. Resources are configured with a customizable lifecycle policy. -- **Load** Used to load data from landing to data lake. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. -- **Data Lake** Several projects distributed across 3 separate layers, to host progressively processed and refined data: - - **L0 - Raw data** Structured Data, stored in relevant formats: structured data stored in BigQuery, unstructured data stored on Cloud Storage with additional metadata stored in BigQuery (for example pictures stored in Cloud Storage and analysis of the images for Cloud Vision API stored in BigQuery). - - **L1 - Cleansed, aggregated and standardized data** - - **L2 - Curated layer** - - **Playground** Temporary tables that Data Analyst may use to perform R&D on data available in other Data Lake layers. +- **Drop off** Used to store temporary data. Data is pushed to Cloud Storage, BigQuery, or Cloud PubSub. Resources are configured with a customizable lifecycle policy. +- **Load** Used to load data from the drop off zone to the data warehouse. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. +- **Data Warehouse** Several projects distributed across 3 separate layers, to host progressively processed and refined data: + - **Landing - Raw data** Structured Data, stored in relevant formats: structured data stored in BigQuery, unstructured data stored on Cloud Storage with additional metadata stored in BigQuery (for example pictures stored in Cloud Storage and analysis of the images for Cloud Vision API stored in BigQuery). + - **Curated - Cleansed, aggregated and curated data** + - **Confidential - Curated and unencrypted layer** + - **Playground** Temporary tables that Data Analyst may use to perform R&D on data available in other Data Warehouse layers. - **Orchestration** Used to host Cloud Composer, which orchestrates all tasks that move data across layers. -- **Transformation** Used to move data between Data Lake layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. +- **Transformation** Used to move data between Data Warehouse layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. - **Exposure** Used to host resources that share processed data with external systems. Depending on the access pattern, data can be presented via Cloud SQL, BigQuery, or Bigtable. For BigQuery data, we strongly suggest relying on [Authorized views](https://cloud.google.com/bigquery/docs/authorized-views). ### Roles @@ -57,9 +57,9 @@ We assign roles on resources at the project level, granting the appropriate role Service account creation follows the least privilege principle, performing a single task which requires access to a defined set of resources. The table below shows a high level overview of roles for each service account on each data layer, using `READ` or `WRITE` access patterns for simplicity. For detailed roles please refer to the code. -|Service Account|Landing|DataLake L0|DataLake L1|DataLake L2| +|Service Account|Drop off|DWH Landing|DWH Curated|DWH Confidential| |-|:-:|:-:|:-:|:-:| -|`landing-sa`|`WRITE`|-|-|-| +|`drop-sa`|`WRITE`|-|-|-| |`load-sa`|`READ`|`READ`/`WRITE`|-|-| |`transformation-sa`|-|`READ`/`WRITE`|`READ`/`WRITE`|`READ`/`WRITE`| |`orchestration-sa`|-|-|-|-| @@ -75,12 +75,12 @@ User groups provide a stable frame of reference that allows decoupling the final We use three groups to control access to resources: - *Data Engineers* They handle and run the Data Hub, with read access to all resources in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. -- *Data Analysts*. They perform analysis on datasets, with read access to the data lake L2 project, and BigQuery READ/WRITE access to the playground project. +- *Data Analysts*. They perform analysis on datasets, with read access to the Data Warehouse Confidential project, and BigQuery READ/WRITE access to the playground project. - *Data Security*:. They handle security configurations related to the Data Hub. This team has admin access to the common project to configure Cloud DLP templates or Data Catalog policy tags. The table below shows a high level overview of roles for each group on each project, using `READ`, `WRITE` and `ADMIN` access patterns for simplicity. For detailed roles please refer to the code. -|Group|Landing|Load|Transformation|Data Lake L0|Data Lake L1|Data Lake L2|Data Lake Playground|Orchestration|Common| +|Group|Drop off|Load|Transformation|DHW Landing|DWH Curated|DWH Confidential|DWH Playground|Orchestration|Common| |-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |Data Engineers|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`| |Data Analysts|-|-|-|-|-|`READ`|`READ`/`WRITE`|-|-| @@ -215,12 +215,12 @@ To create Cloud Key Management keys in the Data Platform you can uncomment the C ### Assign roles at BQ Dataset level -To handle multiple groups of `data-analysts` accessing the same Data Lake layer projects but only to the dataset belonging to a specific group, you may want to assign roles at BigQuery dataset level instead of at project-level. +To handle multiple groups of `data-analysts` accessing the same Data Warehouse layer projects but only to the dataset belonging to a specific group, you may want to assign roles at BigQuery dataset level instead of at project-level. To do this, you need to remove IAM binging at project-level for the `data-analysts` group and give roles at BigQuery dataset level using the `iam` variable on `bigquery-dataset` modules. ## Demo pipeline -The application layer is out of scope of this script. As a demo purpuse only, several Cloud Composer DAGs are provided. Demos will import data from the `landing` area to the `DataLake L2` dataset suing different features. +The application layer is out of scope of this script. As a demo purpuse only, several Cloud Composer DAGs are provided. Demos will import data from the `drop off` area to the `Data Warehouse Confidential` dataset suing different features. You can find examples in the `[demo](./demo)` folder. diff --git a/examples/data-solutions/data-platform-foundations/demo/README.md b/examples/data-solutions/data-platform-foundations/demo/README.md index 5347b2cff..13f750a31 100644 --- a/examples/data-solutions/data-platform-foundations/demo/README.md +++ b/examples/data-solutions/data-platform-foundations/demo/README.md @@ -8,7 +8,7 @@ The example is not intended to be a production-ready code. The demo imports purchase data generated by a store. ## Input files -Data are uploaded to the `landing` GCS bucket. File structure: +Data are uploaded to the `drop off` GCS bucket. File structure: - `customers.csv`: Comma separate value with customer information in the following format: Customer ID, Name, Surname, Registration Timestamp - `purchases.csv`: Comma separate value with customer information in the following format: Item ID, Customer ID, Item, Item price, Purchase Timestamp @@ -16,14 +16,14 @@ Data are uploaded to the `landing` GCS bucket. File structure: Different data pipelines are provided to highlight different features and patterns. For the purpose of the example, a single pipeline handle all data lifecycles. When adapting them to your real use case, you may want to evaluate the option to handle each functional step on a separate pipeline or a dedicated tool. For example, you may want to use `Dataform` to handle data schemas lifecycle. Below you can find a description of each example: - - Simple import data: [`datapipeline.py`](./datapipeline.py) is a simple pipeline to import provided data from the `landing` Google Cloud Storage bucket to the Data Hub L2 layer joining `customers` and `purchases` tables into `customerpurchase` table. - - Import data with Policy Tags: [`datapipeline_dc_tags.py`](./datapipeline.py) imports provided data from `landing` bucket to the Data Hub L2 layer protecting sensitive data using Data Catalog policy Tags. + - Simple import data: [`datapipeline.py`](./datapipeline.py) is a simple pipeline to import provided data from the `drop off` Google Cloud Storage bucket to the Data Hub Confidential layer joining `customers` and `purchases` tables into `customerpurchase` table. + - Import data with Policy Tags: [`datapipeline_dc_tags.py`](./datapipeline.py) imports provided data from `drop off` bucket to the Data Hub Confidential layer protecting sensitive data using Data Catalog policy Tags. - Delete tables: [`delete_table.py`](./delete_table.py) deletes BigQuery tables created by import pipelines. ## Runnin the demo To run demo examples, please follow the following steps: -- 01: copy sample data to the `landing` Cloud Storage bucket impersonating the `load` service account. +- 01: copy sample data to the `drop off` Cloud Storage bucket impersonating the `load` service account. - 02: copy sample data structure definition in the `orchestration` Cloud Storage bucket impersonating the `orchestration` service account. - 03: copy the Cloud Composer DAG to the Cloud Composer Storage bucket impersonating the `orchestration` service account. - 04: Open the Cloud Composer Airflow UI and run the imported DAG. diff --git a/examples/data-solutions/data-platform-foundations/demo/datapipeline.py b/examples/data-solutions/data-platform-foundations/demo/datapipeline.py index 1f748c088..a682d346a 100644 --- a/examples/data-solutions/data-platform-foundations/demo/datapipeline.py +++ b/examples/data-solutions/data-platform-foundations/demo/datapipeline.py @@ -34,23 +34,23 @@ from airflow.utils.task_group import TaskGroup # -------------------------------------------------------------------------------- BQ_LOCATION = os.environ.get("BQ_LOCATION") DATA_CAT_TAGS = json.loads(os.environ.get("DATA_CAT_TAGS")) -DTL_L0_PRJ = os.environ.get("DTL_L0_PRJ") -DTL_L0_BQ_DATASET = os.environ.get("DTL_L0_BQ_DATASET") -DTL_L0_GCS = os.environ.get("DTL_L0_GCS") -DTL_L1_PRJ = os.environ.get("DTL_L1_PRJ") -DTL_L1_BQ_DATASET = os.environ.get("DTL_L1_BQ_DATASET") -DTL_L1_GCS = os.environ.get("DTL_L1_GCS") -DTL_L2_PRJ = os.environ.get("DTL_L2_PRJ") -DTL_L2_BQ_DATASET = os.environ.get("DTL_L2_BQ_DATASET") -DTL_L2_GCS = os.environ.get("DTL_L2_GCS") -DTL_PLG_PRJ = os.environ.get("DTL_PLG_PRJ") -DTL_PLG_BQ_DATASET = os.environ.get("DTL_PLG_BQ_DATASET") -DTL_PLG_GCS = os.environ.get("DTL_PLG_GCS") +DWH_LAND_PRJ = os.environ.get("DWH_LAND_PRJ") +DWH_LAND_BQ_DATASET = os.environ.get("DWH_LAND_BQ_DATASET") +DWH_LAND_GCS = os.environ.get("DWH_LAND_GCS") +DWH_CURATED_PRJ = os.environ.get("DWH_CURATED_PRJ") +DWH_CURATED_BQ_DATASET = os.environ.get("DWH_CURATED_BQ_DATASET") +DWH_CURATED_GCS = os.environ.get("DWH_CURATED_GCS") +DWH_CONFIDENTIAL_PRJ = os.environ.get("DWH_CONFIDENTIAL_PRJ") +DWH_CONFIDENTIAL_BQ_DATASET = os.environ.get("DWH_CONFIDENTIAL_BQ_DATASET") +DWH_CONFIDENTIAL_GCS = os.environ.get("DWH_CONFIDENTIAL_GCS") +DWH_PLG_PRJ = os.environ.get("DWH_PLG_PRJ") +DWH_PLG_BQ_DATASET = os.environ.get("DWH_PLG_BQ_DATASET") +DWH_PLG_GCS = os.environ.get("DWH_PLG_GCS") GCP_REGION = os.environ.get("GCP_REGION") -LND_PRJ = os.environ.get("LND_PRJ") -LND_BQ = os.environ.get("LND_BQ") -LND_GCS = os.environ.get("LND_GCS") -LND_PS = os.environ.get("LND_PS") +DRP_PRJ = os.environ.get("DRP_PRJ") +DRP_BQ = os.environ.get("DRP_BQ") +DRP_GCS = os.environ.get("DRP_GCS") +DRP_PS = os.environ.get("DRP_PS") LOD_PRJ = os.environ.get("LOD_PRJ") LOD_GCS_STAGING = os.environ.get("LOD_GCS_STAGING") LOD_NET_VPC = os.environ.get("LOD_NET_VPC") @@ -127,8 +127,8 @@ with models.DAG( "javascriptTextTransformFunctionName": "transform", "JSONPath": ORC_GCS + "/customers_schema.json", "javascriptTextTransformGcsPath": ORC_GCS + "/customers_udf.js", - "inputFilePattern": LND_GCS + "/customers.csv", - "outputTable": DTL_L0_PRJ + ":"+DTL_L0_BQ_DATASET+".customers", + "inputFilePattern": DRP_GCS + "/customers.csv", + "outputTable": DWH_LAND_PRJ + ":" + DWH_LAND_BQ_DATASET + ".customers", "bigQueryLoadingTemporaryDirectory": LOD_GCS_STAGING + "/tmp/bq/", }, ) @@ -142,8 +142,8 @@ with models.DAG( "javascriptTextTransformFunctionName": "transform", "JSONPath": ORC_GCS + "/purchases_schema.json", "javascriptTextTransformGcsPath": ORC_GCS + "/purchases_udf.js", - "inputFilePattern": LND_GCS + "/purchases.csv", - "outputTable": DTL_L0_PRJ + ":"+DTL_L0_BQ_DATASET+".purchases", + "inputFilePattern": DRP_GCS + "/purchases.csv", + "outputTable": DWH_LAND_PRJ + ":" + DWH_LAND_BQ_DATASET + ".purchases", "bigQueryLoadingTemporaryDirectory": LOD_GCS_STAGING + "/tmp/bq/", }, ) @@ -159,17 +159,15 @@ with models.DAG( 'query':"""SELECT c.id as customer_id, p.id as purchase_id, - c.name as name, - c.surname as surname, p.item as item, p.price as price, p.timestamp as timestamp - FROM `{dtl_0_prj}.{dtl_0_dataset}.customers` c - JOIN `{dtl_0_prj}.{dtl_0_dataset}.purchases` p ON c.id = p.customer_id - """.format(dtl_0_prj=DTL_L0_PRJ, dtl_0_dataset=DTL_L0_BQ_DATASET, ), + FROM `{dwh_0_prj}.{dwh_0_dataset}.customers` c + JOIN `{dwh_0_prj}.{dwh_0_dataset}.purchases` p ON c.id = p.customer_id + """.format(dwh_0_prj=DWH_LAND_PRJ, dwh_0_dataset=DWH_LAND_BQ_DATASET, ), 'destinationTable':{ - 'projectId': DTL_L1_PRJ, - 'datasetId': DTL_L1_BQ_DATASET, + 'projectId': DWH_CURATED_PRJ, + 'datasetId': DWH_CURATED_BQ_DATASET, 'tableId': 'customer_purchase' }, 'writeDisposition':'WRITE_TRUNCATE', @@ -179,8 +177,8 @@ with models.DAG( impersonation_chain=[TRF_SA_BQ] ) - l2_customer_purchase = BigQueryInsertJobOperator( - task_id='bq_l2_customer_purchase', + confidential_customer_purchase = BigQueryInsertJobOperator( + task_id='bq_confidential_customer_purchase', gcp_conn_id='bigquery_default', project_id=TRF_PRJ, location=BQ_LOCATION, @@ -188,18 +186,19 @@ with models.DAG( 'jobType':'QUERY', 'query':{ 'query':"""SELECT - customer_id, - purchase_id, - name, - surname, - item, - price, - timestamp - FROM `{dtl_1_prj}.{dtl_1_dataset}.customer_purchase` - """.format(dtl_1_prj=DTL_L1_PRJ, dtl_1_dataset=DTL_L1_BQ_DATASET, ), + c.id as customer_id, + p.id as purchase_id, + c.name as name, + c.surname as surname, + p.item as item, + p.price as price, + p.timestamp as timestamp + FROM `{dwh_0_prj}.{dwh_0_dataset}.customers` c + JOIN `{dwh_0_prj}.{dwh_0_dataset}.purchases` p ON c.id = p.customer_id + """.format(dwh_0_prj=DWH_LAND_PRJ, dwh_0_dataset=DWH_LAND_BQ_DATASET, ), 'destinationTable':{ - 'projectId': DTL_L2_PRJ, - 'datasetId': DTL_L2_BQ_DATASET, + 'projectId': DWH_CONFIDENTIAL_PRJ, + 'datasetId': DWH_CONFIDENTIAL_BQ_DATASET, 'tableId': 'customer_purchase' }, 'writeDisposition':'WRITE_TRUNCATE', @@ -209,4 +208,4 @@ with models.DAG( impersonation_chain=[TRF_SA_BQ] ) - start >> [customers_import, purchases_import] >> join_customer_purchase >> l2_customer_purchase >> end \ No newline at end of file + start >> [customers_import, purchases_import] >> join_customer_purchase >> confidential_customer_purchase >> end \ No newline at end of file diff --git a/examples/data-solutions/data-platform-foundations/demo/datapipeline_dc_tags.py b/examples/data-solutions/data-platform-foundations/demo/datapipeline_dc_tags.py index 2fb88c9e5..4b15eaaba 100644 --- a/examples/data-solutions/data-platform-foundations/demo/datapipeline_dc_tags.py +++ b/examples/data-solutions/data-platform-foundations/demo/datapipeline_dc_tags.py @@ -34,23 +34,23 @@ from airflow.utils.task_group import TaskGroup # -------------------------------------------------------------------------------- BQ_LOCATION = os.environ.get("BQ_LOCATION") DATA_CAT_TAGS = json.loads(os.environ.get("DATA_CAT_TAGS")) -DTL_L0_PRJ = os.environ.get("DTL_L0_PRJ") -DTL_L0_BQ_DATASET = os.environ.get("DTL_L0_BQ_DATASET") -DTL_L0_GCS = os.environ.get("DTL_L0_GCS") -DTL_L1_PRJ = os.environ.get("DTL_L1_PRJ") -DTL_L1_BQ_DATASET = os.environ.get("DTL_L1_BQ_DATASET") -DTL_L1_GCS = os.environ.get("DTL_L1_GCS") -DTL_L2_PRJ = os.environ.get("DTL_L2_PRJ") -DTL_L2_BQ_DATASET = os.environ.get("DTL_L2_BQ_DATASET") -DTL_L2_GCS = os.environ.get("DTL_L2_GCS") -DTL_PLG_PRJ = os.environ.get("DTL_PLG_PRJ") -DTL_PLG_BQ_DATASET = os.environ.get("DTL_PLG_BQ_DATASET") -DTL_PLG_GCS = os.environ.get("DTL_PLG_GCS") +DWH_LAND_PRJ = os.environ.get("DWH_LAND_PRJ") +DWH_LAND_BQ_DATASET = os.environ.get("DWH_LAND_BQ_DATASET") +DWH_LAND_GCS = os.environ.get("DWH_LAND_GCS") +DWH_CURATED_PRJ = os.environ.get("DWH_CURATED_PRJ") +DWH_CURATED_BQ_DATASET = os.environ.get("DWH_CURATED_BQ_DATASET") +DWH_CURATED_GCS = os.environ.get("DWH_CURATED_GCS") +DWH_CONFIDENTIAL_PRJ = os.environ.get("DWH_CONFIDENTIAL_PRJ") +DWH_CONFIDENTIAL_BQ_DATASET = os.environ.get("DWH_CONFIDENTIAL_BQ_DATASET") +DWH_CONFIDENTIAL_GCS = os.environ.get("DWH_CONFIDENTIAL_GCS") +DWH_PLG_PRJ = os.environ.get("DWH_PLG_PRJ") +DWH_PLG_BQ_DATASET = os.environ.get("DWH_PLG_BQ_DATASET") +DWH_PLG_GCS = os.environ.get("DWH_PLG_GCS") GCP_REGION = os.environ.get("GCP_REGION") -LND_PRJ = os.environ.get("LND_PRJ") -LND_BQ = os.environ.get("LND_BQ") -LND_GCS = os.environ.get("LND_GCS") -LND_PS = os.environ.get("LND_PS") +DRP_PRJ = os.environ.get("DRP_PRJ") +DRP_BQ = os.environ.get("DRP_BQ") +DRP_GCS = os.environ.get("DRP_GCS") +DRP_PS = os.environ.get("DRP_PS") LOD_PRJ = os.environ.get("LOD_PRJ") LOD_GCS_STAGING = os.environ.get("LOD_GCS_STAGING") LOD_NET_VPC = os.environ.get("LOD_NET_VPC") @@ -121,8 +121,8 @@ with models.DAG( with TaskGroup('upsert_table') as upsert_table: upsert_table_customers = BigQueryUpsertTableOperator( task_id="upsert_table_customers", - project_id=DTL_L0_PRJ, - dataset_id=DTL_L0_BQ_DATASET, + project_id=DWH_LAND_PRJ, + dataset_id=DWH_LAND_BQ_DATASET, impersonation_chain=[TRF_SA_DF], table_resource={ "tableReference": {"tableId": "customers"}, @@ -131,28 +131,28 @@ with models.DAG( upsert_table_purchases = BigQueryUpsertTableOperator( task_id="upsert_table_purchases", - project_id=DTL_L0_PRJ, - dataset_id=DTL_L0_BQ_DATASET, + project_id=DWH_LAND_PRJ, + dataset_id=DWH_LAND_BQ_DATASET, impersonation_chain=[TRF_SA_BQ], table_resource={ "tableReference": {"tableId": "purchases"} }, ) - upsert_table_customer_purchase_l1 = BigQueryUpsertTableOperator( - task_id="upsert_table_customer_purchase_l1", - project_id=DTL_L1_PRJ, - dataset_id=DTL_L1_BQ_DATASET, + upsert_table_customer_purchase_curated = BigQueryUpsertTableOperator( + task_id="upsert_table_customer_purchase_curated", + project_id=DWH_CURATED_PRJ, + dataset_id=DWH_CURATED_BQ_DATASET, impersonation_chain=[TRF_SA_BQ], table_resource={ "tableReference": {"tableId": "customer_purchase"} }, ) - upsert_table_customer_purchase_l2 = BigQueryUpsertTableOperator( - task_id="upsert_table_customer_purchase_l2", - project_id=DTL_L2_PRJ, - dataset_id=DTL_L2_BQ_DATASET, + upsert_table_customer_purchase_confidential = BigQueryUpsertTableOperator( + task_id="upsert_table_customer_purchase_confidential", + project_id=DWH_CONFIDENTIAL_PRJ, + dataset_id=DWH_CONFIDENTIAL_BQ_DATASET, impersonation_chain=[TRF_SA_BQ], table_resource={ "tableReference": {"tableId": "customer_purchase"} @@ -164,8 +164,8 @@ with models.DAG( with TaskGroup('update_schema_table') as update_schema_table: update_table_schema_customers = BigQueryUpdateTableSchemaOperator( task_id="update_table_schema_customers", - project_id=DTL_L0_PRJ, - dataset_id=DTL_L0_BQ_DATASET, + project_id=DWH_LAND_PRJ, + dataset_id=DWH_LAND_BQ_DATASET, table_id="customers", impersonation_chain=[TRF_SA_BQ], include_policy_tags=True, @@ -179,8 +179,8 @@ with models.DAG( update_table_schema_customers = BigQueryUpdateTableSchemaOperator( task_id="update_table_schema_purchases", - project_id=DTL_L0_PRJ, - dataset_id=DTL_L0_BQ_DATASET, + project_id=DWH_LAND_PRJ, + dataset_id=DWH_LAND_BQ_DATASET, table_id="purchases", impersonation_chain=[TRF_SA_BQ], include_policy_tags=True, @@ -193,10 +193,10 @@ with models.DAG( ] ) - update_table_schema_customer_purchase_l1 = BigQueryUpdateTableSchemaOperator( - task_id="update_table_schema_customer_purchase_l1", - project_id=DTL_L1_PRJ, - dataset_id=DTL_L1_BQ_DATASET, + update_table_schema_customer_purchase_curated = BigQueryUpdateTableSchemaOperator( + task_id="update_table_schema_customer_purchase_curated", + project_id=DWH_CURATED_PRJ, + dataset_id=DWH_CURATED_BQ_DATASET, table_id="customer_purchase", impersonation_chain=[TRF_SA_BQ], include_policy_tags=True, @@ -211,10 +211,10 @@ with models.DAG( ] ) - update_table_schema_customer_purchase_l2 = BigQueryUpdateTableSchemaOperator( - task_id="update_table_schema_customer_purchase_l2", - project_id=DTL_L2_PRJ, - dataset_id=DTL_L2_BQ_DATASET, + update_table_schema_customer_purchase_confidential = BigQueryUpdateTableSchemaOperator( + task_id="update_table_schema_customer_purchase_confidential", + project_id=DWH_CONFIDENTIAL_PRJ, + dataset_id=DWH_CONFIDENTIAL_BQ_DATASET, table_id="customer_purchase", impersonation_chain=[TRF_SA_BQ], include_policy_tags=True, @@ -238,8 +238,8 @@ with models.DAG( "javascriptTextTransformFunctionName": "transform", "JSONPath": ORC_GCS + "/customers_schema.json", "javascriptTextTransformGcsPath": ORC_GCS + "/customers_udf.js", - "inputFilePattern": LND_GCS + "/customers.csv", - "outputTable": DTL_L0_PRJ + ":"+DTL_L0_BQ_DATASET+".customers", + "inputFilePattern": DRP_GCS + "/customers.csv", + "outputTable": DWH_LAND_PRJ + ":" + DWH_LAND_BQ_DATASET + ".customers", "bigQueryLoadingTemporaryDirectory": LOD_GCS_STAGING + "/tmp/bq/", }, ) @@ -253,8 +253,8 @@ with models.DAG( "javascriptTextTransformFunctionName": "transform", "JSONPath": ORC_GCS + "/purchases_schema.json", "javascriptTextTransformGcsPath": ORC_GCS + "/purchases_udf.js", - "inputFilePattern": LND_GCS + "/purchases.csv", - "outputTable": DTL_L0_PRJ + ":"+DTL_L0_BQ_DATASET+".purchases", + "inputFilePattern": DRP_GCS + "/purchases.csv", + "outputTable": DWH_LAND_PRJ + ":" + DWH_LAND_BQ_DATASET + ".purchases", "bigQueryLoadingTemporaryDirectory": LOD_GCS_STAGING + "/tmp/bq/", }, ) @@ -275,12 +275,12 @@ with models.DAG( p.item as item, p.price as price, p.timestamp as timestamp - FROM `{dtl_0_prj}.{dtl_0_dataset}.customers` c - JOIN `{dtl_0_prj}.{dtl_0_dataset}.purchases` p ON c.id = p.customer_id - """.format(dtl_0_prj=DTL_L0_PRJ, dtl_0_dataset=DTL_L0_BQ_DATASET, ), + FROM `{dwh_0_prj}.{dwh_0_dataset}.customers` c + JOIN `{dwh_0_prj}.{dwh_0_dataset}.purchases` p ON c.id = p.customer_id + """.format(dwh_0_prj=DWH_LAND_PRJ, dwh_0_dataset=DWH_LAND_BQ_DATASET, ), 'destinationTable':{ - 'projectId': DTL_L1_PRJ, - 'datasetId': DTL_L1_BQ_DATASET, + 'projectId': DWH_CURATED_PRJ, + 'datasetId': DWH_CURATED_BQ_DATASET, 'tableId': 'customer_purchase' }, 'writeDisposition':'WRITE_TRUNCATE', @@ -290,8 +290,8 @@ with models.DAG( impersonation_chain=[TRF_SA_BQ] ) - l2_customer_purchase = BigQueryInsertJobOperator( - task_id='bq_l2_customer_purchase', + confidential_customer_purchase = BigQueryInsertJobOperator( + task_id='bq_confidential_customer_purchase', gcp_conn_id='bigquery_default', project_id=TRF_PRJ, location=BQ_LOCATION, @@ -306,11 +306,11 @@ with models.DAG( item, price, timestamp - FROM `{dtl_1_prj}.{dtl_1_dataset}.customer_purchase` - """.format(dtl_1_prj=DTL_L1_PRJ, dtl_1_dataset=DTL_L1_BQ_DATASET, ), + FROM `{dwh_cur_prj}.{dwh_cur_dataset}.customer_purchase` + """.format(dwh_cur_prj=DWH_CURATED_PRJ, dwh_cur_dataset=DWH_CURATED_BQ_DATASET, ), 'destinationTable':{ - 'projectId': DTL_L2_PRJ, - 'datasetId': DTL_L2_BQ_DATASET, + 'projectId': DWH_CONFIDENTIAL_PRJ, + 'datasetId': DWH_CONFIDENTIAL_BQ_DATASET, 'tableId': 'customer_purchase' }, 'writeDisposition':'WRITE_TRUNCATE', @@ -319,4 +319,4 @@ with models.DAG( }, impersonation_chain=[TRF_SA_BQ] ) - start >> upsert_table >> update_schema_table >> [customers_import, purchases_import] >> join_customer_purchase >> l2_customer_purchase >> end + start >> upsert_table >> update_schema_table >> [customers_import, purchases_import] >> join_customer_purchase >> confidential_customer_purchase >> end diff --git a/examples/data-solutions/data-platform-foundations/demo/delete_table.py b/examples/data-solutions/data-platform-foundations/demo/delete_table.py index a2585a68b..dc0c954b1 100644 --- a/examples/data-solutions/data-platform-foundations/demo/delete_table.py +++ b/examples/data-solutions/data-platform-foundations/demo/delete_table.py @@ -34,23 +34,23 @@ from airflow.utils.task_group import TaskGroup # -------------------------------------------------------------------------------- BQ_LOCATION = os.environ.get("BQ_LOCATION") DATA_CAT_TAGS = json.loads(os.environ.get("DATA_CAT_TAGS")) -DTL_L0_PRJ = os.environ.get("DTL_L0_PRJ") -DTL_L0_BQ_DATASET = os.environ.get("DTL_L0_BQ_DATASET") -DTL_L0_GCS = os.environ.get("DTL_L0_GCS") -DTL_L1_PRJ = os.environ.get("DTL_L1_PRJ") -DTL_L1_BQ_DATASET = os.environ.get("DTL_L1_BQ_DATASET") -DTL_L1_GCS = os.environ.get("DTL_L1_GCS") -DTL_L2_PRJ = os.environ.get("DTL_L2_PRJ") -DTL_L2_BQ_DATASET = os.environ.get("DTL_L2_BQ_DATASET") -DTL_L2_GCS = os.environ.get("DTL_L2_GCS") -DTL_PLG_PRJ = os.environ.get("DTL_PLG_PRJ") -DTL_PLG_BQ_DATASET = os.environ.get("DTL_PLG_BQ_DATASET") -DTL_PLG_GCS = os.environ.get("DTL_PLG_GCS") +DWH_LAND_PRJ = os.environ.get("DWH_LAND_PRJ") +DWH_LAND_BQ_DATASET = os.environ.get("DWH_LAND_BQ_DATASET") +DWH_LAND_GCS = os.environ.get("DWH_LAND_GCS") +DWH_CURATED_PRJ = os.environ.get("DWH_CURATED_PRJ") +DWH_CURATED_BQ_DATASET = os.environ.get("DWH_CURATED_BQ_DATASET") +DWH_CURATED_GCS = os.environ.get("DWH_CURATED_GCS") +DWH_CONFIDENTIAL_PRJ = os.environ.get("DWH_CONFIDENTIAL_PRJ") +DWH_CONFIDENTIAL_BQ_DATASET = os.environ.get("DWH_CONFIDENTIAL_BQ_DATASET") +DWH_CONFIDENTIAL_GCS = os.environ.get("DWH_CONFIDENTIAL_GCS") +DWH_PLG_PRJ = os.environ.get("DWH_PLG_PRJ") +DWH_PLG_BQ_DATASET = os.environ.get("DWH_PLG_BQ_DATASET") +DWH_PLG_GCS = os.environ.get("DWH_PLG_GCS") GCP_REGION = os.environ.get("GCP_REGION") -LND_PRJ = os.environ.get("LND_PRJ") -LND_BQ = os.environ.get("LND_BQ") -LND_GCS = os.environ.get("LND_GCS") -LND_PS = os.environ.get("LND_PS") +DRP_PRJ = os.environ.get("DRP_PRJ") +DRP_BQ = os.environ.get("DRP_BQ") +DRP_GCS = os.environ.get("DRP_GCS") +DRP_PS = os.environ.get("DRP_PS") LOD_PRJ = os.environ.get("LOD_PRJ") LOD_GCS_STAGING = os.environ.get("LOD_GCS_STAGING") LOD_NET_VPC = os.environ.get("LOD_NET_VPC") @@ -121,25 +121,25 @@ with models.DAG( with TaskGroup('delete_table') as delte_table: delete_table_customers = BigQueryDeleteTableOperator( task_id="delete_table_customers", - deletion_dataset_table=DTL_L0_PRJ+"."+DTL_L0_BQ_DATASET+".customers", + deletion_dataset_table=DWH_LAND_PRJ+"."+DWH_LAND_BQ_DATASET+".customers", impersonation_chain=[TRF_SA_DF] ) delete_table_purchases = BigQueryDeleteTableOperator( task_id="delete_table_purchases", - deletion_dataset_table=DTL_L0_PRJ+"."+DTL_L0_BQ_DATASET+".purchases", + deletion_dataset_table=DWH_LAND_PRJ+"."+DWH_LAND_BQ_DATASET+".purchases", impersonation_chain=[TRF_SA_DF] ) - delete_table_customer_purchase_l1 = BigQueryDeleteTableOperator( - task_id="delete_table_customer_purchase_l1", - deletion_dataset_table=DTL_L1_PRJ+"."+DTL_L1_BQ_DATASET+".customer_purchase", + delete_table_customer_purchase_curated = BigQueryDeleteTableOperator( + task_id="delete_table_customer_purchase_curated", + deletion_dataset_table=DWH_CURATED_PRJ+"."+DWH_CURATED_BQ_DATASET+".customer_purchase", impersonation_chain=[TRF_SA_DF] ) - delete_table_customer_purchase_l2 = BigQueryDeleteTableOperator( - task_id="delete_table_customer_purchase_l2", - deletion_dataset_table=DTL_L2_PRJ+"."+DTL_L2_BQ_DATASET+".customer_purchase", + delete_table_customer_purchase_confidential = BigQueryDeleteTableOperator( + task_id="delete_table_customer_purchase_confidential", + deletion_dataset_table=DWH_CONFIDENTIAL_PRJ+"."+DWH_CONFIDENTIAL_BQ_DATASET+".customer_purchase", impersonation_chain=[TRF_SA_DF] ) diff --git a/examples/data-solutions/data-platform-foundations/images/overview_diagram.png b/examples/data-solutions/data-platform-foundations/images/overview_diagram.png index b1a0f7887c8659ade3b0923d1b10bb9f4b85f9cc..642c81c2fc966b002167c32f6a155fc5e3145f7f 100644 GIT binary patch literal 51041 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

kZV=gyGoF|DsqpA$}NJ~>JT3l=@|8$W|=`voiI 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 N#D!&qssw-f|1Z499TNZm literal 71315 zcmb@tbySs6+c$U<0!k{~Ap#20-62Sqba!`mNJ&dK2*^P|nnR~_OUEH44&8^2Ir==` zdcRq-X4aZD^UsNW@4fFGSO2anQd#jM<_nS+003ahNPkcT0Hj|4fVhW-2ybyl@WF?F zA-RgnsG*^uLDrSl;D3qTB(>Z=Ia;`R8oQVSmJW{g=I>oiUChlLT&*14j*&Wq0e}jS z`5>m|m3^>m=}D@cNq-Fuk7z&^LnoP#!P`nHxzN^b_XXLOdfsLG*Fx?xE=dovIRuKK zZpR*1YVPiu8a{=|R~Na!x;=pAd)$tO^Vy1)y(pQz7wYN8{+5cy3F-S65$4=GWNS{6 zARKWt>QEg17f0&Y0Q`qIT7Diy%*5X|aWrz`KC8dq)S+=0rkwveihradvv=*&c`8cI zpd;d+=VnDALoGl{l=q@Qvwjf!H*SZ^J(*~fXr6m2lPRyLiD~$|H8W=Ei)o7*adBhj zm0|bZMk|cZ)HGi@*VTCb&FUjW&Md`&lKk2D_b8XI@oc;2uz`VD3cK=)&L9LFK>W*3 zCn5i(!KwQaj{AA!=g7qLI9SC+FaM7Hy&o>v;>c;*NmQnBu)nIa>gO;nWTsQAK3sig zgv^WOl^YF1b8HXUGsqDmHGNE z(51)FZM;b7jm6_tVNytTXGhRm>pmhRBSp|EF|dFj8bE8D!`4RxA;$mj`h^6fYHfP& z(*o;+@31w>5Wv{Z@_j#Y8j=IY-z3h>9|z@-(wz7uOb(8wTBkD3m{fnC-LJQgF4#Hu zDwy~(4&Cs^$~|W@K<-Poha{`!LiyslX=DE${YA5nO^ij%ZZixjGH)30%SQcMox1?F zDDN8Dy0=s6D;+v5?!sg?*#Qv9Y8$b}wFAtz|*bjxFD25Gc3Sgxr(ZC61C*9j826VCV ze!n)}y6A#e0tx7U85oo&*c%@w!GQ4@a8CgxUUvI>ywhF_2|T!an3<2jXX~+JPYV}W zF%5jeIvrSbZEu{g63)(P@!t1%m!h%%&U8e377aiS+GyHJnMs)eW3L8!IvK6uk3F&X zm2$x*3Y&V1-iQyJDE}&A7|Y`HwT$ZBHBr#-3`l`{1l;CqDDD3rVVo68Zy5r5@h&CR`LB^Y?&$=nxjgOvD>Pm zc5B2qQb7QVOE-OJd_Z@sqEiAQI^DF*#jmWrQQbT{Yy(fj(&u7QXuuBLl0k&) zbC0c_gxAcb^5t`mE6wMl4Xayc&*EO69v$WP7-?#z(MFD1aO8|JRsPf{oB3Gl>hJF# z*%b`+Vb3Kknr6jNm{J&CjJ#b%HH}eiZf4bx@Wrz*!W`_blfMI)%{`yv#- zCV((plpxMYouDt>I2|2*IM4r7y;}LgOUTkvF)t${PKt&iJ_5=&Ri~yty6K|X(c++e zIXDf~Cm}E!*)jO|80kfm2lgjibdmKN}4*(z@1TE5MKImTxli43iE1L4`+-j7%uuivo6g$LbQLlE6niy z*zMBGW1*^ci=#nc(?aP8QL$clq)T&dR^;X&I(Br_OYm|1?)ULVTnULF>yIozQ#?LGD)6<`OzMumd}|ug|7@ZB>>3E2t@s-0_5UEfN{$$Q1gI2b}l%6u0-rqIB|cu z2abh}uB==;2A-EqtW&GtK}d&dHqX705LSQxHsZx|Y0*z+pJy57uU$;FM=}lldMR_r zzyF{(rOkis6&izJT6d0@-I81E^z7el(%U=6SQx1{{pm;?3Ea|)?z|9s9*Y1dr*Kl7 zXi!)sc{~X*L|)#CA+k;?NSP}C;D9(B{>*Ul4?7LLzr?r*6XpG2h^jwFDV)uvP{v5Y zC*;pghIOdmd-n)VIU%ZLl2hLgGpSZ)*bT2>kmY=Z6(Md=S^OFeu~2QQP8OUwx?Kh) z>3`X=x{4o*axbi%3h7$rGg44@UGQsHHj6OXG=p?_Y3d0pl{GySiHO}*h zh=^B9NtzONHksx}aq)mCFO6Ix6YS!OZ3Pc~$k98auJI2Vp}RHZPxBGe@O( zh8LkYQrbnT{+v7_JRQmmcwGAQ$as>G?(PbTF|qMEXx9&+PJsMeY;5_cfaj6pn@_P) zNo;!_EgQ>hdE*T!@=`PjJS>Jwz63CzjfsP$?u8pa;Yw@%{+IFnQ>$~nM@t!9j{%k# zIW5W%10C)1lD)OH&YhE!6^z3*-in-K&*j4rzvB8S9*32cC0Ua2bw5qLs6-+%ULpUQ z%7%XLfQkT5e|P%_LXoGFo`EV3F)X0oezn=()7{?RW|>4u{k1htFU(>r@GcZouaPu6P}NqOQUIJa+P?aFnnAosmR)b^iW-xN>fmTYlIDWTeoowYns4S<~eAXi3>R zw>mfM>{q*Rec7_#aJ2L`?Ojws;}WycPrZswmoPW}DJv`J_~>=3f$Z+&(2%BKU`u_y z7%}X|?=#hp(%Wy!RG~k(z?B`x7bQtGOd=GtRTiIG{GmrPwmg#=KOu)_jmv;C0|Cc^ zo`SlF*KtnIny5erKSuWm^c-Z4`36OwdG3nA$|9zye(LG;l-|~MKkCn3q-V=gg;Zg} z;I_j`vwm5LqoH?UWo3W;VY!)0fbn|lFyUL%LosF9hN+C+-Yrq8HTlj;N4tR2nYj|R z#SQ2F=4LbP3N=Q#;j%$BojG^;e?};Ou1Bv`)^vsIo_m$LRf7c`SrTf7ZFZ!yIO(_d zVy7=;W^?rtdDk3}AF4197iw zXpi4Tf|5r^-wS7E?az}Du_E?tsp6&4p#6f8Hf(Pbeo)CKqa-CJKJyU*mo_)Hwl>zC zS$T}@pN5K4$3wUps@z~L`zba>^b{iQE;RxKh44dYu!It*LUu`c93_8sMV?m6f^V0> zS?JNjiL{DJ3bAn*EqWCu)z?lQ4(8^gP2xi<;_GlVvCrdJtP06@+Bq0;3pAuOwKKNf zy^V#OqelmHu)KPXdjHr@-<1xs%>=Ra(X97Jzl{$HHYQp%XcHD__>CXi>c2G_94xGY zhuN*AyV~e{etEFex(bD%-WM?N7JA$|i8y0GGg)F(`rf4sE&F0?%+222`LG!9u0n7L zk@HuqM#jcg+kMAtn2vlgUj387#m9q0_L|ZU+-$1k#F?yo#-2}Ub&sa@`&-DNn@@mo z2|b0OmY#vGE)V9${Q}2v+nok28NmlJTbp(1MvYG#83!w$s^0s0I2a4$yhL6f+L9|) z%KO7xq4ur?KaBxx6ja~do-s~%FKh_Ci`1xiw&wkawu}H7M>1W|dt5Knwt+ZyJZvvy zOpW33nlj;GET%rd4TfA@5-9Jh*Y1E#PaheepJ}0Kn<9V#Q&= zi%yXZTX*~CLd6x)zhY%$|6q8`00pRMq91c5p9sEF0C5ON-e00r3RaBQ4cU5kC#p#i zoCaB`#2VroX|;xH)x3*sQAP8yO4vs*gzdFLaXQAKE=`=}+V9fJz&dI#8aC*tH!m&* zS5|T_FOw&IuZ~s&dF9|f0&~WahWZTjJT5+mh-`-tIT(jVW>Q%^H=9TfqzcY#Zm-_; zXqn^T2EGXpWbp|d!uUBhzh>+c}iLnpcnW_}qu~PwV23&%GleaO1bP>k}biCcCU`i*+M@`O3_i zeSK0NKZa+2zybh2TC&W{>~uq|Y4;83kPm-dIUgZGz63k`NcE$gHc=vI(fVr8bQ^Bk zb2NkPmY$^~s!$#Oqe}?@4M96Jfk+-E-i&xy5D|_wLnr7@ko0v{wY9g%9Qyh7x^k7i zlsp1TCb0ci!u_W`-khQzm1 zoGFF+irH*^LtE^oOk`NTf=6R9ifE@kf&qDz6Iu@3SxS7eS?1a>pKj1J^!&#EajXT6 zdU=^m1xHto=%1$?m!S`ypi@4NB(P{j4@Cp!UZy>FVqQz0ol}xTLnHgp`u#ke``J0p z)XylIyjf(V9D`tiqh@+EDa(uz&z z6;cyp=4#ne6F?^suYPq`Ni-AzcYJO~xm$NCrk-Km?MP?K=XKn!kPW3NWn0OCPx z+hzvwqOr<=T3%xqRLsvN3oC*_=2H^x>u!m9^Y<*30j@9|{v^oW#^T>VrMqr@bxf9oed*?zS-OLuSz4f4OOt^p**sD;Q?{sVM(1uI zrdm8deRPXhlojXX#;?mr6em=+s5xhBKDi$IhxP63_Uwwf4|3KdlxM%N z-_!Ey(~;wf|6O^{+P8wn(wRlY)h&7_G9KZ8f-**(617T$76XP<4^&S8U{&DASX`N3 znuLw@t%L%RQiWvHO@8@0W$s7AL}jznE=_-6aN%fKkO>4;>?coNirLwu$-c1^QNi;w zU>QH3u>q@9xM2mcrOMl9fx^K5RkFEXCgfv+aE=-iUbb}MKSmOJ57`av1OyV9$FR@e z^@EHStCGV|mA2*Mk;SfR)5e`cLnXRASKB9-$;)_1cpR1=hl}&Z$3}}eGT>fX`K)Zw z*`>$rdf`Ig-Bcc>VEP;6@Q7E?u`!0IY$77GYot=0Ku&>%#yY)E>fNk1T15otl3fs)oF|(r;->Rk*JV|FKBPzTX*+j&rK5ePy z{xDbrDQQ+L$Rbk%tdpawm7SwIPrv(0+02_E!RZ|%B0`{&($a>rvtV)QUg1JhyvU86 zLqK)4p|hkWr_cJ*f>CGS-B?>?`we%-;;j2J=zXfWx-A$UCwRKPP7-;zVbL9&-nhaC zLcgx(ht5Gislygyb#2-l;Bguoh)0o*zLwsQS?#HpCnw2EWU<5#;?nFHHk_GWHz(ThCa@6Az~T6_I2{f|E*;U%lbPGDUOzmr4YP>+x`EI%nxnEargQ!3G8fm&>&* z?e9`$B_hQj^_m)U7EnSreM)lT+)T2oJHMo)jdOH4&%G;4=r-n5HlP2{p^IfrhOXyP z3S)}@c&|2UQ*(WLW1SmxOsH>uK2k*mXDZ|3P~a*%a$TBssoJ3uOxW*CIF?tg#yD58 zdVe2X+0ejYX$dNv_`(nsQ!Q271Wsx7d|LP5pTa$^D0z3N6)BAt87e_ImU9C)mOHM` z7;`t^q?Sm#*IZp!=W=+fAcLo*sL->qoXF7E(z4_*cW^JR$j->{Xwsi^T#}`0ur0k^o3Mj&lYOLFKj}1jf?GoH@Ra8}AwPrFEjhwz zAAe`(w<+>Pst_`2#T+*VqV#m4!1J>=lBv(BB_g}x11=wVG%Mj!A8t~vHo8aPd`p%| z@74R^`qb1^I2FLPxmR3ajBEiOR+#J-`++}!&FDx(LyzP@> zAaZNcORjD%Ew#~4Evm*XBxK1Zr6k?(Hdymk!OI56hkm_U@h;OTd(X`5e?MrsT%8U% zteD#m6IV(6&cVT9si@R~_Y9z;r{m^MVl3N#I)y52EbAxI5=KiJtVO&Ef$Y|~a(1kG zT5P*js~PAR+-%me(5zR{3~$NyvW`q7tiv@pq`s+;XItX0L2z3FnK{d_Z09LC#xz(( z)-3|e-#tpkKh156%IG6#Ew_lUwQNm(`+@b+i^jMC0&$-eI6?La+0^??2Kv$6<(xgd zl_|_OLmoXk$^s8lr3~XMOfeJ*jx*Mfp`nDoLgJVzMhpfPcEMfev@7IyTOURC!oq&*4^i;ORufgtV8bD?CaO6WqVC7uV~i-{G-AKppCo4LKyCkR3>zhMVn@2^-f* zpKzJe_KzO!O4OQHtXTW-w6P+(>5Kb{l@!URzl3b?Hb7wT8@jl<67u0p8{Hy-fhuf) zo_*NGMbDj&FCBd!{8Liqd;KzGYRYb}T8oh7gslJOq5bIsVrbarVd`$LuWq{~tGyPs zzTN}h%E(2D)%O{GC#P>uaMJK<%eA9hwc=Ko+B-aiM_DF0N5YD>R#qB0xK`%o?j|CR zBP6=Ou?poS+NtJ|%59H0aL3j$Jc|{-O!_dAyTWocxbNK`N>@*>aDD@@)p3 z>_psyV83krNWBM12I3-QmkBRGXh`fn0WEjcPmbhi0Iid}W&l_47Y zv8vTO$@eclubno&PN;%xZF|K*rh-1RSrAE;s4=I?hFcFM;zfS=92~^(;?Mzq%p!Tx zqBdi2TMazs+ygxaV-3G7&O$9xn}fL&!Q;g5Qe>O-jAL#d0^<801}zN(d|@s5AO2i* z+$s6D35|j*(m@3S%)MLRePm0F(=+Vq^-5TWmK;2PmJLJCodlIU2xO00G?=7VMJj^6t3*MC6Bh8D46(K2R zbw%&2*s52u?ZQ`HB2zOxg?r^A*z5q05e+6nwrE1@aw!#tx6WpCVu9yjpA)3D)^4N< z2Z_#aT0d9ay%PKfY*aSrvylLRRZjBb($Ztclit8R4_9uzKHh-X0}(F=Ghrb8EDMrA zl~gK#CK$SO(DwYSjJN_4_#-OLA53BSQCGBxAgQP7Lo<#*?U6k>7t0kN@a0c0%xkg75k$;*Xc6)2^|#b$Kci5&rVz6^gZZYYokd_&Y3- zKHNVk+Jb0>Y%Vo~if*{^_Ycr~0gBUs2;NO*#ScqY%y3y{Vn&;>v?5C<^0-;+>%Gl7MoX!2bEHsHI@&ug^#Et=%jA13De5)f1| zc~Yvd32xZi*=?RbgMbY3iYqHC8|W#XN934CSNg>KBd(n{-cm6h2fFyn&R1Qh33X5B z{8pY%tn#=-aA}`tp1Xmq(-!eBify175%pgbF<;SZ9pmo`{!cJsI2*~oW#zx_Ci(|- zh5k-3j``f*y$f!Lw&1a z0Au*~_5i)mOHJgTn!H&5Sxta=)eofqE&?~V?Ya1PXOz#QdOX4dkxcd`K9bU^RME9A z9D+0PYO?gJa7a0mVm^042{E8o^{m7}J8UC2?EH-5^BZNpm}ZBWHt$#r)xxgY~Pn@53llU6?M26%1QRnneC2wIdB2x$$Zlw~rUy+#si zkkeacLh1~ga&Dk`>{NR0^Vxo3%TK**KQw4~|HTJ?va43dDAlqISkrreNPvTk^h^5} z<94-rbCwltE;rZf%^;Rd|C#O^=ZUOXo2Kgvd&Ko0w2Um4g1+YUv(RI|Vp|2^OW)mi z+xbKp$sn~h==7wIr+GF#y$SCNXbJfIzj6WG+V<9|E((*T6pZdxi%znYdcslrr?Dvt zDc^5ZE-zdBgiWO}a;Ngh;=WF37`s9cEh&9po(6o=nuyx6@XZ33pB)FV9l@l5s(SUC zi@j!7&HSY$**TB$*YXxNyL#jRbM6tssdE3)SV`cc%M7So#okg~l7Mp=F(_k@sI`W0 zb;HW{eT#5|xvs|@feb-JF>0aEx+ZUFH>-PXz76oLk#^xh@0sLivxOBM;C1gHwu$iV zD>MG&8(>~%F}IoXlBVzOmSKwnu1x>zLbCnu3M+CS(>QYVOSgVK91A->O}-Xs4;zow zQJ*6L*3iSBsUQZ~*>Gg(p$5$~-C3?aE-+G1ii-$0M86ZFlEU`d{Dg2dOpbM1eQj)7 zr^8dRx@-~Cr2i*umls%S&2zBYzLz!j<0Zosdi++aH_;dVi&;`@fuRhuyKd)?&+gKo z!!T%dY0;&AcmGmSydqW&tT%&ozJp4hq+32O}2HB`u$bKlQuC z2h{+!0~dqz8xgS+AW3?q55TwLVS)L5)F7#;)*C8J;KrnoLn=>TMu>wLDX87yxWm64 z5m3}vk)3nvMu9i1vaFJ$z^`sz&k1fYPn12)`Y?f6=H@=@UFBwGgy*pZ3hcWo01aHu?P>v$B9 zwa*PCCm5l+K%xdHdyrZjHUs?}QzqojyC3^7o+a~)U1Sm{K&K<3y@v~KR2fTkxDS^m z!Jpy|+#3ws<)aZrTi%&^eS?KCzQ~4iY2*ZaHyyZXN*H0h;_z&QKdL9a8|HH5X4x#S zK0PQtN2UJFfj70MW5Xq3-`ti;&d&z`jMzMOQyNPyycA36N}1vAXJ_eDFQ!4eFuS*! zT$rEm!jzeClzJ|=#||un)0pPDVJJ%vrfrG$jh8u#ZoWdgW9m%Zuguw&$PXwE_U`f8 zb$*(2pN%&6!Tklseq6Tr)kBOD1M3GW{3-J`;|mN=U!a|SuR~vV7o&V)+;yoy6umcge2Szn@G9TCW=bDfcIo#{QsS8h`m>v?eYj+B0m ziTofyFQDzcMY;P(xA?K1$<@@kUUh^x6VxcQUUAf(;2gJ+Wn*uC>A;ug&aIo%#xi&Y zpCyn15lFSRV;W6yv7Y+rff!Wz)Bh4dR)rpG(8kKfk`0z@1tV{UIbi^_wTv!nWvhg>@7J zH}(pKl|vP}qvN{!IO@VSN3y>3FugdrdBX#i^0z+{20~4Q+9D@rt%cn?Nu%R!wrJKH zBRSIM2q_8J-y+fy#bPSt5+Lgtd^XTM3y|}4$;_C=0KN>ERLUU+HJexdAORY^1E!1Z zreRUm2%YKU-~t=`?mv95l6pfw?qaOdnUlJ=S*6pNzv`F7ckX=e-gf~~m{U^#+hqku zLw)pA?VxYI355qVkR>7mtPEL|+(0M&iG+b)Mwb3jF#79e%k-)`cd#s=nN>}O%w z4jIWqWQ3o30vckDv9LB!$K%k;dTl*FDFz6Upa5&~l1M=i7)=0+i1&y`t5oF&K128R zoxNzc6$;WXAPo*cc}P9n2msDX3QDpHnBXm`)(Ak+2z&Y6>Ij$3=opek!;2|Ry0Ewz zimd3j<@o}JbFwzV>VkKVbxGebm;Fu-{XY5og{sykt}^HNm@dgo?z`$Lrn;-W_-ZhY zsepMA+m}Pl*DzNW>jQonhuVg4)h(S?u0ZMh7ju2%P^zxZnz z(0NiKCc%>f;mhS^%Urye0Qbt~FRnD|{IsvMRBGc}NB04~WtXMam;=hgFdy*53Mjce z+y4rWti$ljZaJ5Pt!$L7sr4+U8(@@7((G}59;jKib!l0tF@dyGSG$TDf4RL+%9b?v&@0ly7ZN4=nD|ThhFyBv6l|zBZhuYbB9Rv7ly+hNYpA55}j z8ReYk&Cda7w*kOFJnJz91Z7(g*QI=kYF6iDvP1%`v@Ue=K|;A^b?41Z>T@g~{a<|q zsERWhZY#;OLC4R`u+*+6BIHDKqu$V0}IA_=4EYnb~ma<laPams_5Io4;O zMYq2rbK2SYyiY?JqJb*mh9aKWuG1BdTWpV;2oQ>3d%v8#2d4Y_Sd{%j=-2#`;6Zfy z>@iZCqFjUVs2WyISR>&_!Iz|&B=ZelP5p&;&8*TicPS5__lE#Rx|jE(Z*Dg&1;Q;Z z;(C0;O~yp>e84JiHLfU5(pl?3);nW7h-lhAPQ!!0{ku0TS8l5utuO$23B%^VT342G zl{Eahlg-`h&abX=F6P0D+yIkMdki%;dG!JV$Wet z?lkD@<+kom9AmVcg>J6iV++^ouu7&Ws?eBmJwey45F=U?U`Ey0*4!X5j z3{(;6R&bp+!#DATsW127p*QG_;91Z|50YvNt|>l5VCj8{VtCxZuP>UX(SpE_)Q74i zCyHCKA~9lVGCsmfgSgwziECuk%bam;1d8Ew-?>^`I;Nf2-Lwd#{AER70pGsq+QKBt zB?Ptu<`;Hi)%JVuewBC?umC`ms>tNa``p=3=Xzz&(z5lzc;}9YpvsxZ*EyBg*lV}t zn%#@u8;l3LxF68gz2X*=Rix|}Gv0m#;huIe|9T0rQTX%D!TWZIw*RH_ai+>h za)c6Qy(e+@!9L|7LXgq)(@Bdr+ySs51zWt;4Azj%1%e){4WMWlv3jdkt?eA+#QC`RU+JLegtUbYN z)k@FSN>Tq~9nXQ_EOWiW6#NO!2jlI-x6s)BUxz7rHQ#t*{YvMX$Xxd()02ju$vBmc zlXAVsIi-ATInT@xypviTXq=LqID}!xDIj#t??#jLyTdTP^Jv;bO7YHfTD~Ou-B<>0 zZHnvLrn(Tz9!j-s!%%HgYHG!vc4(=4NHO?267U*6YUo9tegeBx>o5bN<7-v8TG35z zU^O7f=_mA;ZwGQvLJ7y}f$AC|Z=R z6q6?#lV|foy*P+gn01qhZD~syN%-pW{#`V%M(9mX>Btl7Aj!0+(OZW=MT4G3BMcCk z56v~%bQchhS}ii?;w*yzoMdF^OC^*gQuk%=Z?9kSxiD{H4kH57@(`JOF`32#!3x6m z0S(S92d)@n77u3Ma65|C68_LDO?OXKbcn5)9>|<1f9Ghdeq)%^!^dL4?=2`5JRh zU{%Xx1W~Fz&x(p)&Srn^zm({<2rHz1pOp{#V_mLMr$7q43!C-Sa~=*moQ*G{jSjcq z+$RB-^g~e)JB|E>wJW(K^n*pGDG!CzNZZHqT?BdjY`(H-FqS}UwIMZ-8LE2!d6QzF zq9b{}2$SH;O@BM8z0GUc>RIAKNbhQtEj0OXSvk=S-vQSqX20T-Om`neCjixUG#^+`>gQC<^HEyUn2&x{S5xVtz9mREj?Qg zZei8~zphh1KO-yiO9~+QJY!6apVvcmsa9Ck87#c-`yn#NSWIWhCS9>{;4fWCGQN&Y1`wY-6$Mf)pYBMPucbZH!nq2>5#P zZbfKc^?T0bouov|#Z~ zw2F2%RzRMVFSU#lJ13CrK`}S#dZ=w5`8pHReYl>u`&qKmm5B+b>B&s&s6Nl*Wyr+( zW9P#Snd!m0$>aJT+$5n0?bm34K|Ckht6amknFRKp@pPM2Z~Y9Tm`3D#jz%mP%nu!W zcHZC?&5q}m90&A*-^*I>BZh7Uq2puO z=1O)SAFIO&kp05KXzQmJuOcH}B|TKUZWpUenZAKA-YQ03Ui}V8HJjTAdc!zb;fsCo zOST~345Qrpcn`YTuor~T*^?pXQ>!v$X_I17u8IsSY*A#UQwXxTuZ8TD?=totTCXy+ z2(}yvWm|T9SAWrTH`i`8J5xw@`Fvbp4SLs!lTY~`@kC=TIPW0r4K>5_t(>&tm&a55 z3a6oHp;|E+$#56SNN4vN&{!B;LMcLCvm0=2P;*@5EY27UZ7|&If2jCz|3DbOD-fS$ zLsBBtOHE*Y$gfpbNm>8nHJO|Lg~p$~oMasypmT%3lFnpxMG;YyE^vM?j%VzW4MooO z%@7f_nG5I7-FnyFuH(a{5{IGr?%q}o@_EWDV!Ba+J*NxokH4?F(OVBvVc`xL8nqQo zg7G2Nx!@G9`dYcpg78;;cmc?WYnv+i6gk zTZzukoF^v>$M-{Gc3EQvhMbtu8+_2j&~OXk=6a{PiKEt>DgllC`Z=bvdA#G_6f4(@ zgTEuIla`UXKQsKb66GJzj-6tYSe0;Ubd9yvIbsxn#w(#-aGyc|pILQUBY_P=o#1IOdczZ|CG!7Z>n zyHW*%wSNA%%aPa8QEny{Km1$FwLa4VqHup?JANZlYh1a(ej-d@xYuog^QTR<$8}l3 zbQG86k>D(4EWHWP>HN{4VItt83Zqbka4CWAG0)QDvLn*(_8;~FZEpqJJFhe3#$rRs z))l^3?<{Ph0A5Jc#m*n!rZwI4c5w8u55huB+*~~Hnq}VjaBFdlZvjea97$m%=GiNNFg{CGWf%x8qZ`mCXcmXGeALbK{-H(6D z+G*-te=q>sS>_77ixy&zMEF^{C=PxO5RYQWh~F6>6#9{E;_BYL6`a$iF;S(XII(8k zyGW!d?0;xI+@noMLuC1RWuHHNKiptT2=cw%5FRdAU6xT-CkJS#({QIIt(P(b?`xE0F`CA7i8}|vPid2`zIdbuVrNd(ea9i;2-mAd(vWbxW z*P*O^mxrF~Utm}x=mq8(aF3{6low}r$dNwB!I?RJeE0k5uacBR^URoP*iA%vmdBXN zR~-?f8#mQN{4~oekqk|CqtJj?*}2X+ONfMtp>9(Qdjxkp(F&+vL>@yqs7YI2E08ij1ioVMx@_RVFY+Bji@(e$|i6JOUqgiT-IxDsIUHt zXcT@LuvRJ^z!z(F>p29BBy${ zq$;`zEmHv2(B!X|9fEZ$_wl=BxnjlQ$qvv84{IzUez_t!JO@6+$)o6D4`F6ik3~=+ zD?SrKrg|6sQk!8%qsG{b>(i!mcLC6eJ9(UnK=rQSvsZ6j`xtrs;9I2uw*mjMAM7ZM zrQ3S!ed|4^g~F2kqipX>{H`WDrz3yVah%Gd!2`ArGZFMAFUO}mKd@+2F**Q-rZ+#J{xMThV0=<~q&yW}?hFq7b2#&X*<-VfUH@|W?s zioAw-0k-evw@?woEr>D)ooRD-G6P(Hm8hlSIh*lMRLBW4=r{@TJZyjPy?H(E+D(s| zEr&hJh*``pGKsrKaj+QpMDCEcf00r$W}ckL6emxQ(s$an`ZBxuy53bt1fUANpp!E7 zFMm<(G4X3EHd~NG*i|MG-v)vSmMuAip^od_Pzm#%CAZy%_gSp?t#0|>AD*L#LsxIS zd1uebENijjpyM4^!^(9t`FVt)rx|iJ!@(0mB$CNIC26^4Y@I{)a|>BtM!!wu9({>C9Yg zUsOT%k6&amlJW~{uBE1-2Q)65e)EtO{XYX4U!kmy-YsUQEXJoi1?{hbnZl zyMJ;XM$P$Vz8G%tC6P+leF1E))ogKs__UE1iZ!TGN#u3QjjvlXKb*T<_r7dF*}V6S z?CKMr-K=fB`5^Q7%A=c7KG$BV^_LnNMiD#7mXiJE6*pf$RE26?5d1;nPiZCc!N12h z9tnhoSuzpU%X-5GZQr+%dCIv%--SE6-?SmFR@vv`%pp`h%T!PpqKzB4vlk`iw95h* z1RETA_(wqmrWES~@44lNII~`msdzC(uZ;R`*Wk=sw#`=OR?s8+QM6KA$0Lrr`a;af z5^19+UF+@;0I^r0AtKFxp0&48IJ3k-b6p(iRbF8+6m+jW>uS2V zI-l27^&^UcAf2!a!(N$dC+A(#iQ&9)TwCY>3>Sl5^3(Am`rgTSs(LB%T|agoJU*b% zxqR4k@}8eq!(;jjyyA#|{2zq0J3jnhLTG?!@#mwGAX1=;_}mudKLwt@v8AbySrYGc zeii%|CH>z@KmWHW{y$*0l_puWI?4jk*o{tH;U z`Mm_FelD81=cs3$ur&Nc&AP~WZp_(-&{_EXp|YVo%)Uj-k}Oz&bk-?mAM2#jXBxhT z!l1w4cpOWd=*aj3^!!gDUR%2fwDiI_kwDFrR?3D%&#*q}jg8iC!apm5T^-J!l|EGC z!C$HK7dHQWDhbauqb<;zm%Ei%8s)Nmt@PaZhGeA3s$O>amAB>R4wuh)dmFC}ewo6H zTJp*NZ94cPjf4uT{mOfUBBMo7w9vL}-Oth8_ZI-=84gx-0sIt@{#Fq3&k`Yxnt|zb zS*rYEWf2j8+Ce~+psQ-V?3rA{{4Rp<-fQMaqf|JGkNU4WhzMya93(d9!lVvrekO>} z@WBhqMnMYg0$B$9yy@ND2Kl~9V!O~--oZv2`%9+;YH_r`IRN<^k?d9^cCVG@T-0iV zaBz5EVJCK>&9Q2ge!x$-U(Qm^?-R}f*AKh#$tAtvo{$J+dygT>my4PWe>1u3-wo}| zSHHDOThJS-*pFeS0@y@|V^57)*3qmarO=#^k$*8`oEP6VRucRylk=z;I&xfO)b_DX zf0`lgDmDUhitlLs1IYX16!Jk6&0|5L1Mr$Ny`GO|`7>W$Q)~wKOWiNL-8p+1jG91C zsrWoe=zcDGb{SJ=Y95U5>k~v7jf+(#fFs^d^zRfrh=3wd;sHeYixU;fmmX1^Or$T~ z=?^K#1u@l;xHX!y6TLBz#PB@`Y_qqat7TXNcfAzvC;QJ(FGMjO;uxm_K#b?509^`Z zRuSXRZ|u3E_2Nj(D;X{X-e|sqPBAe(ytzTTh(C8k|FeIa1x1h{42QzCDcOkky7XhP zLEH4~c0zq+^03-y1ma4uqZIKEk{tyUn!y@+0`xtC@2fFM1(kHbqRCj(^^Xn<(pgjbyx%QZ^h&IWT6*f>oUUcef$ z`eqvo5xvTCMi&RDL^L3VC$jD=>HIPNjvn6PWyujV+f_QVH>+{BxxizO!u_lpu>pC$ z9EsX38-DRWiW(Xm8Q3mLKf(+DD(864ZQ(q<^D)1&k|ja9bx#EVl83iuV6lhn`ok*X zK^vWr@r{3n^`AQRh!4o^>e8dGytuLORGxn+B>Z^6A;GNu2!~OiJ&3M};W>QlKo}u7V z1yZ(W*$qsbP|CI|MO){7$G+DTH*K{A@H_kDBZ^0zD+5`;< zxbl0$K~prLFy6@~74?CeqZ@=@C7!dp9zshirHEcz8j4R2RP|9yA&qES>0N|->9h>C za7ZyTLR7h`>B%~y;8{GfFYPa7MrUf~f_XxLs@Z>i*(DOvr7axJjwX9F2%h~!Gm`N> zm`ueyTXAcE-&**7y)_@{xTrhkXT*b>1g&c&I8plnAp5h+!+ZVIJ-* zUa3lUQw(NXAzmZ&@wN>5xIxp9f%3X0{YQ=TqS_n#l4Qo{jM30zWgtlRGZ7}M;j7o$ zH0FKJK8xc(KmBsAf7@S&{rip7JBu?T=kJ_*&(8>1tkZ5`UOpzusnV%m*e3aQvtL>7 z5pC;>1?-guSVh;gX)xCqKj8sESrLEdgV%7BYGv{fE>mvXO9HiogibFMlB*GT5% zDiaMS{X%e1(J798xK&azLo^kK;`-wsTDWMxNlP({?42^9Wj2v{DHmxLj#BtXB;N8~ z#rcW5$ctL0nX!{}%8cv%b`k=h#fMXfu+5nA@)U2Ek8ja}E-Uiw*#(UB)$1g2J!Qc+ z?6)vybr6lf_S3hoZi?k0x7Y@9@pRH?HJMuGFCn#x4i$-Vdh!WhzJz}B(s4uS8B{zp z5usFwic#!n|6$GF=HBq9X5`AZ#{bK)(hEk75CFh=X~NlgpK~xBxKI#FR}sH7!5~s+ zI{WltS?qBNmpIUk#&bBvMsA*R$+RXbLHrwQ=(jbZr^m7kyYTvqoi)0fHM#}UG?yec zQ!}30@)%l)$ zCjY&9Vt>UWL@uKpjlQ7Uk|Wmq=a@hx0U6j}(D?u0>#d{W>Y6>_PM#zrxVwbL-Q5ys z8i(NS?(Q1FEx1Fl5Zv8^JBY*AUxN%f z0m6gS@=TyD%e~bEO~X_qi?jk;^?H&p;sp!A-u|NjdK(!b!zO;2t zzQ0k-_df!JX1x3|7K%#@0wH~# zvk1_pVpB3va(?LFwn7M(g=3QzSm>Z*P|U04CYy0;M07)L(c9U-p+(AOS(!!XsMWQp zBvN61@)8wH>2%=)b^HWqxL7m@cAJG>f3%gp7`xX_5Zc2&jgYN=+ovydoKY^!W_vVT z>AZ5ii}mo3O@w-L8{Bp}O*2X?;O_hxat7SsxY5TlY<|=qt)HxEwcM$$?|Uwzf1{+J zpm6Y;NJ9U*cRh<}dw-Nf(D7{3UhtvO|MBKgz}aCw=AYK36^}b-ny5CPuJ_;@;6CrI z;FS#cZywUe#hOlYzpEur)Gem-nZ2=mN5n`Z=8zB_ZZ#Vk%U*Y4yu2OJ^}JI-j1;z_ zV|FPpIIJ6@m9`GB#apy)i-5GGiEa(i2r9b791pKG1+ZM4;@>afxVrCc$Iy8YgFh;!sX}raa?hBQ~bgW)B zbz!R@&fhps*W40>oJHyD=2+p%8PI+(Dq3tXTqo|k+lU-S(;M30Zegh7h|Z8(Nd6FO zVV-ffe7~Fj>|sQ|z?o>-w&?2vyqU>v0foBAxbm01!oAtj_xUs*_919xV|R8FT$s8j zjq@X^)%E%1dHjNguI|!sS}cKAtL|f`wIx(VlkxsiLRJlHU6lB6Jl9c6pME+)l0_ee znl(Z>arT}1`re-1@x7(oYp^O<-0ahKPx$;K4aWd7SAxu;h(Qr;>K>VqiOI$l5zPrM zM_R;pU7LO0qpfO@rNCGa~`>nEWm)dbf^Ch!tqILgDl z&TFXgDVj}h=yP=?{&pfnVgQGK4y_4T$$vp=#qWd{KA5Id_2NR{u z@iXQt(mSvBz6J%FD$N~u?RX&cOmgyq^=v1}ehs#uS}`V3a>E9glQa!osgzRE-n>sj zxUMYra-;Xsj#RNR=eXT`2I^RRvIl!nD1+bWHPbMX^sOf|g>qj)VJygr@nA*W(3)y_ zzg97LdQ|P6xLRHL`-?_OXm?1MO-UO>-t5a56-LZ7WSaE*&J=eyTGmJe^$QG~g}Js@ zJ>2cO-OoU8@c`xT(^xueIS|J^e;-TF0q(ZYu%ZqWs*u}934dUXF6cpG(qgA@n;9}? z9>|#paw?qaagn!Upa9DiSctm3x+>SMDeg)S;iU-|r4B^Tc?Pn3{xl{^)KMn-*wUZU zs^n=e(@^rj05(eKrrpJi?jT?tgCu%9lv*6#?;#(x?j;biRHr0Q{=}!qn0)s|!f4F~ zO=PlE0_#&q!?(&j-sR3>!Fg?Wx_o9!VWC41$N=+cd@2s?$Z*Kkjbvqp;T{hwu5nGZ z+Ni}^KcBBhyg6r+VE@9MWqDjeGgW;gcBqjhVg#bU3S|`$89O@zHa<=^Tjxt5SHZ3j z()Y1X5)7!GYfOla?A)}d0TluxT79XyAnHy(U#UQcv1RriryzZh#JOd#RD>*|^MZwQ zzRSjNHv$7ehM$WdMaXiK44tzSN4eY!P(aIHEAlx=X$S2M;)3uRX)G@Y8aPUqJE`2q0RfC$?GzWBni&LgKrsUJJiVdf z9EsfE1C%i2s0?%|(PQz+g}H=UZOsG_o#j58**Zbk^u1C^qx4fxOfsi5$+2LJwHcxrn+%zo7;^GjzOzih*o90#@%<|~IOQ0yM#J=xb z`p#qfb>ylR=wcMP@_fUp@5YfMXo0t*DyM(y13eoQvui;R6!7xhlK}5w&us(e zajCu4Id}maw*{&&2muTY@IeZ~2VCf<3mQZytmK3wZ-Tp^>hB@g(S3c;zKF8tiGeXO z7zLA-E;tYf%z~3!*vy%e^6n&xa<;6vzmu? zam!<8U1VFrEU8-2J4Z6Ql~GTi`w|4&0DR65tml!gS=WOFk!4TEh$TK}X8XGm4OT!c z0-u1FV!%Ry&wpR&q6z}NTt6h^KUvp5Sgf~&KkP$ipIeLiE6ge@+-3cll}k${^MiZC zg@v*4y$(_e{4UXi>#p*jflB-U^1KAr&^+I~M+DQxOOynYmKWN4!2R!AJxTTdFnOM8 zFSq@m0&XRFy7hCAyFtkZhpQx!M=AOgk6&Uyo(HFK@pex_4i?oqW8yjK05YcjVO-d3dPLr67b05+iS?$Q~HhleJt1 zKR%3zJcPH`38ahMUE1pk`B8n0T&MRKbeo(2^TYn{(*6*Yo8q~0+FC6; z-)1!O6jD!i9bU2MUkA6-UBvf?twdvJ=P7%>Z<6TBoc1A&sCvk`tX7%U$2dsJA_-=Je}LJxR@aOgkOCV)n@ zR%v7(3IjyHg!_q$j4QQR(NKmWd#q|TN}=k{Koy8mJi>q39Q0lE|734~-+`$(oaIxL zyVSY^!UZrtBR`-GJ`HfU>{;!xHK9L=gUj~Rvk$Bm9tePty8+HJHZtMzGvJ9N8dJc( z|4kJTffOQ}Om!78g-}3!G1U}%C z6m_ibz7WOg4_F{@Q%BAdb@2Tk$KBg*S~>bg3H}Fp-ggNA`l9w9ltU2WE8q_ZG=n+} z{pV?LMtn2CO#*~4VV&g0Lun)GH8>-#`^PYoq79ytl{Lbu$BgOgtcV~7ypeaElvq;!j}9??x*Lu}x=6sD zS$?8TX(P=Gd?1AvCiCi7`~gfl_93BnMxOG`i2$(iKe^*ST*DCl z_9ynK+`rV;*rc9;C=BZH(uQD!@;TKcJJE=4Wg-Gd2H=jU!uY5r!6_Jgv-p@8lYFpR zRTx1A=FXnbVZ*n0=-Pad1vDN;mx)ou?f9Ho60iGft~0=pz%NVa`3rJwZ{9&Pf{W-CWiZPL@-uV~g%LEO=_rv&f?8-63&cAzr--0xfQ6C*{ zKLmu3F2d3U9v0^kJyG4Rff1=AXVRFmZrY zshd;kW(Qq`rHnjL9kf_Ud`X_D4hWM!yjWrJbX>P#935mZ?foD-^p8NAIVyMjt%a4* zsK8Y%T(2s1s{OJ2aG1pBz(yumI#*Vvq!}Trm3jWhmG)fY0dbR$vJ_l9c`uyqiwlj4wdqI;EbTW}rJ?e=N`eR;O zP}|n1H~*tDYwEt)$LTSo&b4D+3@NbPOmhVDtHj*+mQ0SJ^x%-?<6;>VloHyWEzDrA z&pbGaOL-%%3A~_=7FKX{Z0apO6DF~UzZ0POp8I|@nCnEavOcv@JF1@4g0q_2SQ(=L zU{|wy_*zY@{}&pL_-ZGwoKq4!8(+FfmlKJ=Udus@?iVrilQX-5%~23=Ok$S;k4HG- z*+wE>UzBf{z*rjYzrs^O-#34LK`xXlm!g$Oc`=hA%}zlH6;otO9DcPKs{K+CYEB|H ze~Xqpk-Cj`TEpydFd7_jE%9Z9vQ8~6@oI-r`#)k6_B|YB^CU~eLTMuugIsd`tXDNd zgPSc5%n=zraBW3SE7-ek+4=H#QBJeWmz<4|c(qo~$Ik=UJb)WIewuI!^RSCUoVX27G!_F#%jg+P2em^YppJpwCaDCF`j=clfx20C-h^%HaMNjhf$3Bf{Td$Liy?TP!FcnY!qKrsH@cvFg+4^`Yu|fFp0m~IX>pg%WI=i&TTvfQ&=Z6P{8%lab#D_) zRQ)40&&s>_B3VvHEq~Q)4G7q_4m1g zHTSQc9ojZ;@pr&YP)tLHc!Fl1OpSq|o>k*X(#kz7aM>>x=^4e-5+mCEw*~Zl*8sc) ziU+JRe8`YZ9T!hiWqMn*LlUq!A6N$Fi_h8e z4@d*(l;nqtE?!A$^o$q&^UYxV2o+=y$y-r*+|djDcSppY{fHgd#!L+Sjv|+JyK5d% zX0#bYu;mN_+4XjG1i+|dL!i0GkclTNWyHD2uVz=w*7QoFaM5Xg8xx>vo|V3o{=#*3 z-6<50-7sU;*5!>1%DA9GCCXVTu>@x-|Rp|OgL?& z5T6Bbz0+(`an7!PG?BQ>E={wN5tO<3R!5i~MKHSfT7+LN<3z!BDN20Qc#}0|g*gIHgZL=F7#YlV#O+LMWK>hFTVD7>W zf4xpufr?7U%Nzc*ITHgEiuL0%$tlBn0*$V`V~v)gnr?HoNM;kMztW;>x>F!>qo-dv z^e?BRsP>c)66f?9RW|+OuCA_5qzzT0#B4k%?rJM?%0<#t`s+efr?Q~|j4Sh*&54(o zdA2IK8OAwcR*A3Mqa;=UoR#$dj}!s|Es2P4c8(`M$6)*yAIq{5-w&Khu(+NPJ~_V*ZFPrsf~I5)LXb%xUN?X>H1H2Q_m$EYGbRo$ z+E`la82&57xZi2;tu7Jjrq!->`x6vIh-I z-3N1wEA4WQ8ej9w|2l2QkX;iQZ^js(?J^-C1_A{0M;F;u&w#UVl5>9d_D2lAyQ1X- zxLE=lCVxSMyv_$sW=sA^Y6zT_1{^M31?kq{@1lZkicjpzu{)jFJP}|g?a|RgS?q6c zzFSvX)-<(WLU#;k%9aRfhzwaf|8TL;#0+6d3_d9i-mNDim+8k~Mp&6w;|xO~qArly zB!5U7n!izE+)u`NqR+3AEd~FxR_@}tf44hp~K%-F}$~@rqBXB!AoL0t%WdmzYyQczB7({&68x|0O?lxY1;F} zh4eorY3@SHQ#oOSwOR#wcOtqai#Fzs51-nFm--PZgkF-dl2|Bls}9QO><$9y7GPT| z_|GM-EIx7SqAQx{oPD_p6qbkdxT)1i^HDB){g|905RYtdaD25l9 z#{CST6=c>?oB2Rp_h;qsBQv;$ufSQXcMtTL`roD$FX*H>JNUz9WK6YE*;MMN?)DfdJ=>PAS=%Bnyk$J zi0+;k=lK|CtqTM3@2vglq15zk-@y=U&AK#MZdIKRr2o z%bUP4argI-n(8ViF)69+;(r3fj~8T0%WL(P8p|#!Ki9*f{P!D^Lc04%1>*&-7Uyum zUJeqcBPealUektb_NAqRB!7<35TH4x)#^WX&Y%U$Y~9KPP8!LYpJ6??4Pay3B9E%!7u$Bzd)?Smt|2gkWRCrZ zkH7Jmv~sw*MSSiDDJ-SOt6gnJ!+=Ie71qT71BvJ@95?D}WQOA>k zbiWkGS_?c)$+c}lhd}J@)WY_a7T!KC7h^4y|C0UlabH?&r@PzPLPya5{ob1s^D&Dw z2C8Pwx>WQ$nx{B#LV%3-H-p~0h|kXnrKtTErl$ec(&6rVF@kNW>%X(B3Oy=5s9x}tuB_DfZC%w=q@7nH9Hzj3e-=o!>^tiOT+*NuK{BW13XAD9!G@G(-b&D3ZGN2B$pl~Y8D_G z+(-vpZz6h=H}6wJo;1jwE*ddw)0bM)xUu?9_@v8{h_GMhp~9Zm(D>H{qe8dlNM;m} zf#@>2;A5v{++^Hm->#1>Xa$ahQDN)qjlH2EWynXPhNJjW5k;*N&GyP<^JOofJsPng z{idd2vdj$H@VJl=HZQns(R8<;2cvV1>QE+mu0r~CBx;*GNjXCdD|rT>9fwlUbBy0k z2oOh7aTGCLhy6+0mA2X1lQC#S-@jk&9QR<1;VyQPit%-}l{%2#JBHl+oL)WB5RJ(X zqL0QNtT7q{e0Tf!X*Cn15j*f~@T3RUjl;^i=45)cxFo3fi}Ui`9=qoShL zq|S-@V8M$!lxfbGz`wkpec&>Ki-V!4HM{VsQxY6A#hF%=D3Gxi7H+?pI#sDs#Dq^Q zlg~LyV&)8-ca&m06G`L+h29w(LrhesZ8taPI+tT&GA%eW?OyNIN~-QD(O2jDl)h@d|m*)&!}Ipa6gBtBdY``HZ|>`> zs~9t6V@E&;1~(5(ZJ*<6mqJ`x3TSfoA}aScH{Ie2xzJztuE#)fD6r?Z)BHBaQF<=utP*z`w9#+03tXigQ+MeftBCQR^rb+%HhM(x=2CK=3yG@>_@Hf5$N zd(KFSbbiG`$pq}R3h6Vj@F_!R9>~8ubhu5{I~{F8w~mh*4GbpI!!tAJF!J5FV+=f|0;SJjVz*ANZ6F8!FZFy@DYST7wcj#_E}RgWV`m@VA;aO!GMgm?sz zS7)k3CW=xq1Qhc+RISF*O~rchmY+hfLp954J3dQ=z$#<|p;)P-p+Abcxf*90vnQNg z--<#2@f1ra@YJQl5bupuN1zy}=`Ft(>|bVMPwe*#)6-nz)V;kLG}Bu|>x3PRYTVQY zV$Ich&zTU*Q8!b>#FsgfSG7NP$@Hht0mo8Vs+;DcgYl#5gGC8+6|As`&@GI5S<*cn zv>BV}8MsD+`}(v$cMhP7R7U`7$NLnLDlJXevi#?_1$)W_C)g=<n{`c)hlgjDwlJI3x8|r%USV*81XHDR9or`}^xtEeoH)Xs$TX z!)CFiX8F2QAP*J-L&B?h6iie!tu)U#`N&gL{X_;+cQbNu+NPIuh5jwSw>5j| z{g&+P2g<}t(f8n3C%bEbK_cF z7Sv__>Q&8LwKr}%?xZuGvqI37B-pX0*?V4>8qeXM4oq!zt*SDYmw%FKiuKyY3(%s& zu++K0mCb(OtDW={d1Q<93H|}Xz+Q2gcE78V8N980=8JyjmrHzRq7gx+R#kMSZdQB@ zzWZ8lG!sL%r%#3EkX!Rd)%6wg=ucwS_Y1AB1-y|*_|7#Pfa$)?IQ?B4s#iV&h1j26 zm~os1#m3I(fK?OymtZkXxU#1cypOi(>e7?I$)K8wtF;SQDZ>mI89chGw4@@iSqTVg zoTY?#;H1q#B($1A%1p_WFL$qNeciUxz>P1=WuHT(c|e6fw=tL`3IBOVdJC%Cf|n_0 z;d$`&YW4hTH6iT0mY`9e6-tni>A`i{U7WHww%mexk(gl>i6E16`VLr8(J!`2uBoH` z^TO_d@^BK|jPO4b=JiW0?#iZaf|nUpliV?^&nae;YQpa9+YPxIcm>lV`%O`UmrN!C z`|Bc|Q%3|CPJMzma3XrDXbM@FN6SjS+S{@Lhn8DhgahVG)s6>4(=3Gq@Vwkq)r4o~ ziyZw%56c}IiK*j;1Rc*~-_8U2KBZ`~DJsYv#7gEpJ9KYIO1w!2O(2~w+-Qn@qb7gTCFh)2s}l6_e6^|Va{ z6Qu*O-h?wMa6=-g;|O%|AW8qsa`Ps8+t#4##`M=zBErvIg}goP>J-}A%!yuH!5IFoVmCpHQ3Ng@j-C7PS-;}cR$`Ow2Nh=>4>#*R@ecVVG zYIL7<0d$Crjk$6U1H378TekU8wmIvyIzc%%V7%?bOyd~IeiS=vGeRgi)HdBN#d84% z^x`D`5Iw_L_jL-JX6z!a3}=e0)jZ3>e9_XuJr|dns+9Iz1O>~mO z{S0modoi)d1z$dNbkUkupG!Lp4oVAsXl%~ByrIxfl^U$L)<~~-;^Y666(Q1K4#=7r zxVSjkrG=CQiAL&`e>t=SQFJTsRGL)vn{gB~yp=9Jm0GacSVl+d1Bz{Y_VQ~c*^iNq z>&^$Gw60G;Kp6=Z-j@g}h=tDU_u|}j#d^!L70)xjDOOCpOe{Al*!(vt8o(&loU3oN z@)py)C`YK9;Z*ai5_yfE8zik@JJ*dn{xJq0qqLZI9=OG6D8VV(*xa}$XU3;6x8B>} zrun&sO&BGPCS#h64B2u6oBOk4+v({&!AzTB6Ucc_kLoP<8#G;Q&C2>FFDERl-eg9p z%M$&=>IIsymg*ev0*WzZOv9?_Ck`CVQumo@IcB4}!rhHBhHOnW_dlg&qe1JZevcaT zrpnW|gha(l2Ls)VG86pK@a0~pi3KQ^*t+>9Ka13oWY|BW%ZWm!rctTMwpA9QGcKuf z7AS5nc^1?ysbk_2*6VpY-c9DOVj?oPq{y(;uBuq+W8=n18jTf0xn|Znv~6U-Cq1yo zS3T?*!Ya-@=GnnC`xUk(C8tPPz%}+#HFdNP%d%KA#a8+q+=ww#31`ku^K4o-+IMZp z!h=VuK4EWbtucBvBO_jt(Tac&Ugti2Wd zXUbYi#AsueP20{!u`{Vm0f8~MDwB#Ts5qEWhKOg>Hw5<$5PfNWm1tf(6j@mEhJWv+ zA4BmQWXfz?eK)s+HZwCb3O8W>!PD)(P!wFi-MFAgV_O)zaDT%=Q=sFgYhn&KHy2#8 zdS(9qtU6q+#h4Seh@Ue1Q#tOss^g&w}w!I#S_DbonQKD8ab1FcxT~J zk4zUEue-%Y)SGM!9YU(kF}dWY!(L$G@kpc^;DTd43!thlEb>uSZG@>Z26X?JrvUWQ zWP#rgv)B~+$ucif<<0oeS1B=?rl-T>*0=yTLZ1Bu9x*CZLFzQUMAE3(88j&C3_Ozl zVvGN0F28~`bu=zzSm_`ZY3M0O`-F+NI2E3kw?D>(`+oi}m^80X_;_>7_g)Hs5d)}P zYw|a(6-0z=k5Y0aMDDKE)xX;fViA(q?(b>;oG_^LNRN_J-IPbVxYV9}irp-g#pHDJ z#{k6f`_<+^oc_Zq+IpeNfx+@uo_+j&>#bs!rq+8G@7tPV5Bl2drl#*TobE?~aWs#! zaSD1Vm8(=GyaKyLB0ejfHxrmos2i}tcjSiaIIN2)7Z(|kk&P6cFc?E?Yim~*k+l^y zg3RIp%Jek%X?$Z%E*`Vs^@I$W_w9naoX|hAHy1G!653jACp7-Cw-c?0D73bd>AR5hJ6#bbqN>h(?a7ub)yW6)uhoJ_6@14n1thu$-f!`LA}7 z_3j~8R6S*~N=ShbO3kWmcg=!N(af6(iOfgEM4ZpIfi)?#z=fA98p<5DogJmssUvzx*0yHb_GElc-x{yQ(1dD!pm93;rH1&q?oN@6j7;K&fi?gz z8U@Xz_Z5F6^Oq1wYAraBP6Xi4r^1jJ8{DCt3pX~I*9_lUtbJyGN=N@QG9uK~b&2P7 z;3*tcS98}F&T@f_#^UxVIPK!3XQr!w#pn0${SmGN=yV5uf~OEvh#z3HcZNb2p)B@R zKRN@0DqgfOCn*+Nisj~J-Obc5yY-Polk!%aMYqMDv;}HB7a$^90j}B4H%)()2)?dJ zRVkmeQ~H`a!wEq5w3M7JpT#j1@}E{v^FDX$^ZLL>4Ng~a$Iiut$YYYfCUxnyjoE1~ z0&2<4^#jg+U9W4F$64q1FxB&R5H8|j4hZqh>3D@?CZE@tdV%~KazsDh1-Tz|O!o_D ze&gHph{I;wNIB!%K&E&DPa(hU;%w5sc|Gb=xi3OM+EY19#dATg-vJ{w!W9uBn=vNe581LmzZvk;)VrLi#0a<}2I z*YWiUm3%o>S?Wd8N}*W8u!IoLukBINs}BxdnO#l!Zqs zbxy*4pY>^5RRB+QsBXL6RKVAL-cdEqAxInn1?U#0T6by$Ozk#tPa9i&JO}bT!vn@@nA3r;@%Id-PDQ zRCnaX%f+1hjm|cpq-R-Nq!)2YM9cMOR(ar>%)Ye5%xTsCdOl=%wxRNOfiCr0t1dK& zbxD$Oc@-_9JY6W(fb9w5!z5g0qNgs+L>qs;Iv$gx=krJR5Gd5x!QByWyS)&wTd16@ z`yynz9@;JPu*XB{J=?sOsPCXJw=y8}4u2_)ue>>pXSvq&^YGua#*qlYx35oob9XMW zV(o$h$iexa>R^4ZVnEoBq} zvnF~fpFlq9T=A?Q+nbv(Il4e8{@X(j#=QGmw)BkbWAMwl2tjA&nrsHP30Irun z4y6OcU3~6N>eszZk9>MkIUBnD`(Xj^Tye$*pzeH;Rq@Mbgk}ja+87MW$Pme=asct3 z#hbs`tq!Hzc991R3|l*^6VDc)+K1oQ;hL#Ac=K%vMz$jcG1jUh8z$Z{=bQJ`f$6wg zuB_#s6B?2i!Z?NWpOAeS%1p`MSQjPj*VWNjFe8)gcf4OLP-T7_t#s@Z124?sneqVA zCG0Hx1=+Oigun4_JlwxZtc#8{y2N2<%BpBm+Lpv~tM^ZnnsHFbuHXYDX|#EONgX&8 zy0^|P4lv!Ve!Nq7yeeObpuvRV8MQPO?ev5DT;zjIgV_Z*y~a;{o}twJa!|8Kd3CW ztJ2jOcb@6|&Hgm&KYW2vb+DUOYl%FnXZ5O_<#=6XilMDI_XGLTjK22sNSS?G>qh$l zql#pea4D{)FrrCbUE=Y__1ZI!urF_$Q&e%Ph4wZ^5~^kgutP&6Ux($3tG`R%onl5k zf_;&+KAWJDo7}N&#wmCy<)!v_yAYIN973*Fa|aJ?j~BuICcuhj4h8S}Lr=~3ij$VO zIV*lOe9NYN?1T-Q1htu0JIz81`>8jnjeGkI&9sX(mH&2Rc!4>1f4a&8mEh7#6B$G% z#RCoSik7EjX+TWVjTcL8{pv(VPj!AFU`DK!!AyRB(nO(1V0MPHD4{{yJ=0>#nMTuU z(UF8$__v$=B#u@?dB|Ai2xmeiVL9cxQIpS65#X$WOV%2)(SR3@JYI8TwI(1(?%#mS zCR}#k98U^)U6fyPGkDL8BxF}ph7N}3p)D3_sep4lq+5K%!}A>)4gHF(xcTv;+%K+x zCg9@~OTkQw5*8Nbs;4?8{2hOh<0TL9L(HW}P~ptn;u?c@OmU%Zw|Zw z9g>Gtz}c(knn}WIj4Y#SH-Qpc!$r|C5}Nayc?Rl;fc_87oI&u;$jI($H39RsEKj>T z5+BnSoC%K7B7C9WXbsZ!w?4vui@FF22@!SPN9bAm-Q6kbSMHT9)B$NxMm)eP#4UKw zE=zyxA$^26rXUy-LbY}k)Zz;0K|SkMeoO^HH-|ys;OeVOGN5)w_~LiGjBfkIq71~S z_jfpi)48Iq`*cP~dA>-{y)N*nen-&OffLuiuTzsj)~q}KV`$;_KXS1ng7?y$SQ$41 z@MdI5#{IE^phDxoBH)8m;_-35c2?U5)JZ@Hs+{kg|LKVj9 zB0at2=qy2hm%ph>*_$+xTizL0#v&#;xyQSdF+$y*LEy!4!sk6>v+C-P(IWQ^u-Xz2 zxr9xj&X7Lg@_{NKb0cF?0_IvUs;dMarC6@S`8vpCBo z$3fQQY>w3Gsg8>_Zv=%4ngps)>cKoNKz%fFHl9qR9!_9RY`;2^h+uxUHSs}@|MC6l zpM4G&@-@r%knVoN>_4(K=$x!Sl?hIGlP8_l3r*{7jYuTfnRxLa$&r~)$#78O%dEcJ zm4~C~3Iy_wQsZvwBvA#oIdsaV&pw>*BTXlUhfw$m;+aDv6C`5@FpjM+O(Mv};DG>= z0}8y1e!Lk;if#w$iy6iMld;wKYHQQD{PB>cEnLkVU9`|3YD4-6H*!fI>Kqx@*vTbAX3yA%uD^0N7VVC{?(i& zuNC$Cpp5br;%6XxANVE6eMpWy!*6}V}#qR{o%P>NgS6Fmo-ItTrdllX4-y$IY_Q`en~?%X+v_+K83!`r@1i_#?jWWU6(MAgZ_R zK-G3-TGBKmjUj(kF(X9Yb=P}$^8{R229Y-X5^K-&+}MPpvI@LaRaFCRZ_S~a6h-$W zDVgt5dC~i%d7qr3QbwR(sE{Ek9>s3ewBG$M;3bt%6(QmUQoOLXgj=T5V;vUoXklfm8Pl&j~mp9 zKx*RrmbIO(0jtbabA#_CApqT+A2a}{pvvVIArL*Hve|9FE_rx5-}L@tcBMy)HBcdOJ_be4zwSA@XKK-TImJ`o`$X4O5M#{{A=lU%sb(GihLi*No}MV}bp9N8nf zw6imdAhG5X83RKEg2a!S*d2U%yehTt#R?sJoGz$vUZqUyQR=96y}a}VJSzX~OfiiqfdO@$ zKMc&7chU1T9n853}do5IGp>DQ3KO6~< zGC``{LZPrxExz1P_~?#Uu3#=~ z^ZoLcf_FyAFjHeGr3|)=vV#h8WEe!tXJOfi2%$|Shv2(q}?lhV+XSQ|g3wwZW72^?f*@h{Yb#>|<{i)3&B16C2V^S}b zW4Nsh){N{JeXb=7v9~WLw;gxN!BVqArYFW6@>4j_Eb;(@Kkh197wt>EuQ@}#1Juuo z$k}(>T2<(*lktDI4D}n+{cRblk`r{2iWsJ6sGIC{+UeJ15=e&a0M$BQC^N>iLSg&` zurK%_4%O0n2y~}ctL(uY_=j(fBjhVn--zK9}RuGqPdGX#uYmoM|;hJ3-%Z1Z0sappP7+&J~vEh;iP?lwxQzu{DkZ#7;i z8#Jni1rDo=6`mou7Xxi=#w0!tUkbP;t|38&5kNGPl8!sC$UtVHB%NN;sP!;0rYxqI zeHu#16hgXGn%ML!y}6-;$(jnf!WkMf-TlXG?Ncu%IA6DYpk%x>-%%rQ`MTrTQ{@`H zK^w6e5eAhK-Do4F6wqf&P1D!u@OWAH_~+m->k)O;8W(RZKdukq^E1uZg9Uf*1ErnD z{iQbJ!wZsdtpzL9eWtRD(Mwl7YDW6zT&cMg$$v1GNj4sS;LD)n{WLP7LRH&K*p*H` z*HVruoj##iF?;yQLHGFMcRD-&{Z*uFOr%hY7*Ge6OH;CgzhAN8FP1O?xzW<8Oa0Z0 zSXh;8%4tQmM$$EFUdl-Q(+V|t>u*iQi++||%TN_|_in2?mH7B{+vc1-FKzp=-lm&( zl*GiL=!%W?-QU>N>s0vTZh_a}nyA?qYIXyj_-hQno~K^emh^{#hsx81=hiPddJmRc z>xZ>}mNVTXvD&`okc=o2QmTc&!ulAY=v;d@ATgqUr8y`9Zg^V|2z0%>SgR+MvRm^* z?aSg%wti=_l7-0LAy=gVlPzRdrUXj3zjs^UWLbks@Zk#!qxJQhQ9j$Yhd*eK6FghQ zR>xt^=5wDau>Y$TV6;Y0K2Hf^Qmw%~HN$jvhqo~Aqc=uq-+fWcqc?VM-B`b|`j7ka z;F|)u_)I~6JHQpvlAjh0dGvUYJm?=qNn1qin|^5fQ`#=yq9SIJ)&Rp z4%Bj4e%bi%vLz#c=Vo~|iyNtE4m17=HZ9^J$<@BOMu{d+2;&yfSEtYCSUdTBzFtai zXe=ABIc8Yx3(zKc9TZnYy4VUwwUq!Ta29`0TdrLD{cvB|P1q`5T=>1N@cTtj@V@S(RWyM1A{Id!h=TSLZf<#?$tO^GQP5Z)5t*f$rxcpoe>6 z<$h@eV|b0M?P22*IJFGGtJR`Cz(53Uu8=NZ{p1xc-P(&Z9A0REpR|XRZRq9rjGXW+ zQ|o6(4-MzZ9 zoE;wbEk;{Eplr4UIc33A13EPXNol}R-6LK}u%5*t29nP`3AfTRrw}D_+T6JBNJf+^ zCkY=#zmC4dC`44I9Q3a1?CjL|ZL;1JrtOty`j)C3KFkg$|B2n$0-5dz%UKw7Jw>@G zIvJHuU5PcCGpda*y?Xp0!-z#975xS7-%|LixG8bT4HIyd&plg*+&1kdM7}B5it_MS zo7TEm`+{Z(J3U+K_j>yVs%jk97lSQgeqUY3y)3li+eUgZgev?&+k2e>EAbsArX}B< z%jf$3ZBg7n<38b@4EXGvR!XE9&@PHoGe@ol{iov#fC~UdQA52+^1^Nf<8?4|ZN05t z@hsl+VQS3lr$a-w8_I6wk5*P%52vH(u@P^jF<)GcXfX}OQqfe}49FWbV~M-5??g2h zD8xoZ7wo%bWl~N~7G&f}7>{jG(j2>7dQ3?1E0%OenbrfLu8roc5fe7v*B6q1ym1g~ zXT2{UwxT~t=6s+8JvVvwdaww8Jc|}_Sh+X* zXEE}0Scb*#Twvv)b>;f(qcD~fQEyI=!%|>YTe9$u?)5kkOVXG-=ky|dlGdBtaAy5v zm3-;|pYHOmO@Ak=`>Xo1$t%j07wRdfEMdAM5{;p+tV~=5wqnIu+$^EW-+j%9L zumyFVJ#pNrT`8(d9mzIl<7X>fxnSTRX%)5zwN$)isgBJ`^fzCz(IJ&zLAXN%n4Q+@ ze%BWl{S?tE%}8nUhYwp_(+8gnZFuA=gH~=c6w(4=z+2t9xk#YVR4zTp6G-Zml}xiCV||= z%3Qp|>cyoKxPz@wkO*0LaV1pS&_2#umoj@h)(}-a%2v5@cxYqof4;G>_eYjGO{mUY zpR%PiY+#Hgt~`rR7Z0)Y^wy=W_V)h4HPfWDwr@|U&OA`mU3(OG8FHwzdG2{yj@P0O z`&_-Tgu?BGf?jq?!b~E%nNn%uv^2ili!5f zU3vTkTQAE#F5RSk0b`JZ0(exEiaWqZWxQ5^! zAb4HR~uJvV?bcKTu43F}m)X-W=SzVmo5mRvm0MljRX%HYp` ztELY24nr6mdA9v%HijENLat+C=FWujsJu&SxYDOC zLZc%V*VOn8T+zKJ)S_KvP8*+D?kWwHLmdQ823y^BHwIk1SEAv|+PPS^*_pg@P5@3V0U7IDBgqKteDWWu~Mk_PdP)46e?40~tIlBaGuB|eNa zX6cVNQT#%HO<1eJK$|?lt7%ZIn?c3qvxQB|<;1cS;w(aCKDNM8bU7Qa7NVSqQV5XV z^kg5j#hjS<7^p9EX;y5a6FecD-Oy57zu3lV6^OGJH7VX--XL`qZpf9sqk%9p9e84k z=Va;Y@mcTpM5UOt+CQ-TO8f9ZOe$Ypg`(vM;~wy$ePp4O4d*Pqwk;?asU7E6I2X>a zCAXn=b&bV$SuD z_Z$)LX?8rkvufc`{{n1mnL^$697>> za7y%K%!MTdTu3)r(#aCX$GOcbhZT7U_at5lCa>L|G(2dJ zUR#$r;?O$rid5`QekBTwV{rt3=64^}uw>SoA{fBCKKp=~TPuphUM4V<%DTupOO2J& zqu2e1l@*?q9Udv5k3ZsW|2eecnS^4C0~M_S+}cyre~td78Q;7P^btN!^uQL6L>Ut~ zj=C$#Cf*$Ht~-h}@-X9PeB&4n-|pG6SNTr${bd!S-kSO2@-C!g0fzytN|Fh4ae+$v zkZy~bZp{klHk7&*Kqtgjb@_hm%YkzjQ{!w6DJFZFg?e|CMDlC@;TW-aa~&4{UO^?o zfhA6~OZO=>W(4z2tsv1HptY!*mdNL8tXY8i6hL{i!d=@5`Zv7G@^rVgV9>g$X`mxt z|ENO9u`@}KI^|@ko<`kunj3>)6+O0sP+!C(4w#S>s0-K0{dRDW>g6cM3G!bR&qT|s4S34JO^`+o zc=&kz8S1ylOc-S#S1sZ1Vrj29p6QA5Nff)i+bawAHb%*>pR^iq#80j9Z%L|ez$mYi*Q{`N zHqH`~P6W%*6dOev%*DF#kS_;h8O|b}Ex1={bo;|6%N@Hb&t9d=k=BOaX?i1|I~hut z=$naySM@!8Vdxgrw1j)!D)h4d$Gce(sZsCU<|Un^`MjkK;s~I<3lhG_ou5 z_cs29on(*4hz&?fdu>5JR2$9do_x62NG4H15%lOL$(rIoeW*vZGRLl;N#||;qZ^;i z2P#z6w&V;3jOb#Psn-_nt$UG&XxLE6rNji({O_e`ZeFurG-be0^8&)qcSN6D`4w zNtTZ~cT5^AK@TBCmQOJI9cXL{`1o=~H#fKXmamF(#*DcTr2~a{`PhrJp6MkbOrQx+X`&QSK=D&VO2$Y-3-7ylE=CZ7qWWTYGRR~ZTyrzUUjc3s>t%@<_hio*4I`UDHwVjiec~_-1vr&K~)YzT7VhOB6_&1Lq5a!zHv)>{SNS z3lvawGm$-+e|-0&9Ki$PwVvO#WBXhdP{s8D=f*%p1w*rQZ6Su=VAxfL7RR&}O+NZg zbk7q_vi}yCHZ4`TIoEUDl}2tQC#EiddJ^YDS9oMN~;BVM?NzB5~BcxnqAvO zI7LPZeI?6jtGEE1x{jN+9Hq{8^UEL7Y{~YxvDEIu!%&N$ysCO{{srZ`evQly_rkk5 z2;S8FMUAq2kSiB*RU7YBnnGH-5`4_?ZjtkZDO4!Gq;cbu=;&WTk(Y$a6cIY#%WD)i zN4rRi_o(vS$^=UG?AB7n+rQ(P&w91cK4Zk3#)H2Jli&BnJ*4kuc6fvD7JDy-6K&UJ z8j3G5q2W^y%||p%84SNO<`&`qhLZO``(n|0kn-~*ycQlG3dkW#>k}l!?)RIY`;1a~ ztLmjzCs|D1Naf?xwH@w}rEoClA=F~;0iQZ2rPDS)Mc-_kCnTqDtvJU9vSNp)sy(7d z5>qAN3LUOW9+5F|r|IPYfDUJs96p6;a_En{XIFvYXY^s_adg#YG65vf>~-be6(_cv zIF(rJDOA_t7O@1<@h+tx1s>$)UmW?Q4Y_+gLZRIm7pLe`lw{3N1XCtCP+Pq@W&9z9 z%S@5R0~5UXGefi<7S31G_fEuN#6D@-Z9k8;Q)|KhMj3YSb6Q==R#`c@ zCkBZWITk+lTUNqU!u$fGu=}*RPT5Dv*F2JQ`kF?GZ6GnOX>RG*Mg|pmCw8mgnPFaNpwE(jl zu|t*Oge#|{21iar)nV>HaQX>HubhSoD`?h}zKt<;rcCzqW-~?q?&%Nu;(sW|OUWv; z_0!uH{9NhTRcl1A<~*IH^^B$cuJ%Jf8M{RZM&p~^$0ar5zL;6fq|`*VjrGD&0w;p%OAt{FcXFBGUM+xT^;M%f(erU z^B54J+kXIC?f4TfLG~Ol%N_MogqAKArg5=_*e0f^v=4@jP31qMU<6!WBTm$wZ>0vr z+f-Jk_4#>U+)v5FE<{9&Z%+B$6;wTKB{dBD&XW1=GrT^BlO=P#ESh(mAsRf$X>F2u z?=y7VEU^6Idby>|()Zm`RT8@11I5PtT1EnHgZcLTw-(3U_JaTCd!)XmBZB8e`mm-uK%cVX1g;;KR!}mN+5CO!OXRBl+Vvr zYNnc$Jz;Rqjev2+2&lrHSb>UReSC;l8XL;2>!ZDHEB{GCb#`t!_x1%0rkalG&bm8G z&s8QD?${R}HLlDSZm-rFQTmT*I`@(}UrR;x?K1c-4H1ll72R)?lcsJu2XqbKdI;ts z7R}g1=)o7TrtEZC3gPVr)|yaRGaKTjDv+>y zAJWlJPxV^!o`KOEUtSRu6n>7sC41d_j5TPfxr+5^)9ZLlM^AZqej8~^WrHZp6TEy>`w*P>A&+^zBw?RM|YCzrNgRJY8dJ3GqQt`Njk+VjUTs`DmCG zZzO)=a(CkE0bxRyrL8Pd-ZP2O!ogohznc^TCY((9OqP3y!Tkwf0!mNa&t#3ev(`NA zo)=GZS>7*0*e>;bQ?Qgph*BYaMW;>A<4GcA(|2VZXYGGt6d^!c8EE@cTSS&NLS_$$ z*UHrVJV9h{rA_POKzv(8h2H3>JP|s{;?m5w*~Y4(UAxyU$WZ%kKzsXkG}IgLqi?!7 zBO{uC_j9fH>(6+Gi?j0g?!_EKFQ#0@weZaJ^Dw^Xve3QuT(BPlO;P;58Fe^m|C5jX z-4*^09b&~puT8Pd^TUjBOUwGs=FWy9uJ(AOPkj%SV|BI#`m6K+i{=&YD-l^8JD`BsRj!dUSyIPe#*J#R?SB^M!N{|BCKc;R@6oH!F z%+00bKKabQ^qcRXJ5Nr)3+{g^*qV(t$6}ICZVKIwSL=;7Usfss^V7(hOqk(W@il>r zyWexl(tTn{SNPZBc6y!)&F4TCPwRGrID|PL&+tJucn;%6t0HDr|3C^8L_O}I$+2Bhk9ebcR@WHO?AM& zN&ZyG?C+GeWmuBR@~HV;kvK|c!25}r&m+IJ)+V!Qw)C99h?{-q3$BcH$*gIggZlXY zFll)jV*r~hjh`0fn_<~DvY$vk2G14xmw;YWIp_JR?di=f0BC2qw-SOe&6+z zhOv=;?3lxVwAWJbZiH9ToRktM4rXM2rnNNCwc}v|aizY&`@X9OefjZB{I;^t;k0s0 z$TJ*cKL3B-k4Rt^gBaFF0DmpJ&}S+3Fm}nZB`r1H_WWY&Iv-xOG9n z{V>p#-I`*zoGP78$4>A1wrfYCB5V0oze7!YOsyGm1P3Q0$wC(>+uJ)x-GalcPa&Tw z6t$o5*XV_L3gnq=ujMOk`e>y6sqxJ-zAZhEp9149f#%?YVTLkN%|As>Ouvy3-WU?p!-3R6TXbk?VY(p!WZ*NLXCa zm0(eYZzuvyAivjTsYjpG`b2)0pn=R8Ot+T1fP+4|XA=)SeLs%L<(7?NgDOBAYzqkf zVsfRJQAj*(8&7XnS;Zz$vkDf`?kqTn2Hg~gRo(-5G%b=SiwidfRKa;SU&Al&LN?uY zY|n+VaU8su?gd#AB@S4L`DF?P@;#;?q#6vS@DSv{?}NQ<`~}AO{!A<)5_*oE0?}!P z@mk1D46B}nizEv&0_l?SK~N*iXF8Ph@#}H1Z${j4aSqO3!CSz?6k8h!I>;U$ zDZZQ-qj5NHtTw~6uaizzPX#t(yRi`o)G0Y*rAUi#wU~VPTyhCS{(?EN!p>E{mbz{-0pgOH z81+lm3aJdz^t+Z_ebUUbYCe<1k2wNTiY|Zsn<)a84-DRa=4c@TOGy9H?lwsU!s{g~ zWoddng7n|ua>aA`rpl$|1-vu6h%o|UNe&cdc6fCnai?Y>dSLzgy>gnnVx~;y4-vl( z7*($op6juH|Z(bo55tn+>@ycWsg&s0Kk{N))LVpH2_Y#UJo{Whqkud ze@w^>Er7C>BmY)|AR%$h7@52b?HnZAhbtBqtHl{7drAPL% z$CcWS^)qJVC^w3pkN;Gx{PU=!-zxxsgbhM-vw$M}yFqMbSVVr4PE@F9myPykb$&>+ z3k(!y_sgVU-NVb$iFa};a8*A^^2#F`9l|jz%0Z9lny+`IJyEC}57t$@WS%KA{$6yN z|DOw>%|aD`?QOxpUF<~zTIU7wrf%-c_*&AR9D6ZsHRE)|entVgW zG&So3;ECv4ApESH-^Wz1{kD6zK#^kQti_a;DWXZPrw0S&-0UI$2Ww^letGkcylcODzl{` zQ?VPX(Ky8!2d-;ZOZU;iNTSVEIl8ZD?X%@b!F8}@eOzL+%hGvOyXXx#-0c*c#kWaQ zD~L6>>e)l0bk^cJFpDG!>)fhDAFTpa#My`aunm2^6PBh}Gii@2wdu(@CXmi+0w&N0 z9LbW~V0@#m%U3>>qCU0C0k<3NM*+#dN&-ZZ)& zElSYc)lq4#?}Km6^1r3Gj^z$jL9@qz349_=gBvNa znScMbl15+3=+f4fbN-Sl>_pY_ZO?(x-`%yVQKa(W@jG;+c$AZonlo2eG7@~7#9t3YCrcmzo!|p@!GWj~%q?vZYfQb&x#QS!@991C+YI0o)h(xzJS<$Dxn5tnZ2wH}&;_GZnn zlLhO0TThR#iY$BgjI>S%-JIRN7hZ!{_Bf7`SrBHkaD;KJ!Y<3q!CDY2YeC0NL{Fz4 z@Jh-8v6qn07AN!Ijn7F|Lsh zInRA@`~tZ}cy(p0={pO~_gR@?*`7qbFRpCa+ov7JS?SYhY>6AEZQEGuJq`03>g}AB z(;o_3ZU_2U+qlXRiU4fQ>Am9@4@YPU&JYW?GTw3K6{6WyzoksYTCj!%G{7jH;)qf%d=Zn+v&2j@6BC} z)$Ml3nU{qUL%mdSl_dJu-hTd@9dyqyB9TT03jYn9Uif%Z7oHsUsrkdjgh=~AMm8`g z={t5E>v93H|IE^Q&OyWJU*fq4RK{3Re!LOm>q=4rUz-tggX{!}`ELv+juaYw_ z>{Bun_ubQg3)VyGf<~V~EGdZ*Tj{-k(~mqkNQCpg#x?&gXWi$W>^E8EdlILIdK!92 z1HX76X)OU@qbWNQAsq0Z(12+w$tj~~c+sW`O{FeP*4}HjR^mpnpGycBXtQn6mEA#w z!8bGcqaTwJ~hMHN%jMcq=2B0r-th;etr~V<4n(454dnKmW&j zRq3B+UIV{a%Lm>DN67KL!S7iXwBkq(Pv%jm#XRRF0BXer&f<2}6|wLty~m2Cx8W%6 z_PD{73$;q`_{*xy?LXh*8uCA*SS#No{QJcK46y1K19(i@?OIm!Zb*J?ygUYBzfzbG z`QI=79}W^o_n)>vSxFZu+_MvqRU=sUgCK$IZ4$)|6(Ri1MYvpY8ML|bAuaxL4jSK0 z;n_Jg)P+iG+kXwpH^aO8qDzM1&%uKwvdK9ZV_eu=N>#}$%|bkd@B;N!hsId(QV&P-T7T-s zM=}#sQ^RE8PIgT*CZ1LPO|S?bM~u~m$ImiFA9%y?5n~tJj=@i)*n%_sRnf=Kj7A)+ zQ)WB?gYy;yrdC2xV|eZqgNc`b9iZ~zd_Y*M`Lrc29;Qv1$0dfTYCPMBLUEzz)5`&k z1~k}xqbJy?))Py$px~RkyuNK5Hj&40@D6EyVUVwhT1y=LzwDUmm}^ zS`|FM5^5l6-MtZ?If;BDJ@DWu>1Jdt%}wByp{lpANX<-dJkXfsUp_5LUSDfu+I8&T zDDA0barGnv7JI5SBAZ3`{k!(-S^i_aMg|a9=^hYi;h}+MeNI#7zMw~CkP?*q$Funn zQoE^Y;I&`08Gdi&_P4k&Ej`){NCN|Ae%iWkhB^XREvF2oh~!U-J$TGN@W9&39(m7b z9w~^mYu9!%R&ek0Sn*qn(2OAI==3;EmQm3Dv|{EY3^?ae`^&xLd8|!*p zDULX%3x=Nu#3C+orW+v9#ThCfKj)<*G2fuc6F|5RxU_>gmV*~$T!?*hC*+2q;yl-F zLDbI0FPxqO`7|ox1c02>b;sfrm@{5Hzz%oQfDN z*OUorh+rOgI~S|oa1T#yUI^InZz5;9-8DIt@==^DGg$M@#mc&y+t9j^^6DNl>&`mw zSx~hupA22c51ju@-=Wg6;HySsfCFY>W%erLX+~k;?B`B{WBq9qGmDBOm6;PHD2s~v z+5dPh;)a|Y8-&l(OFx=B;ex!c&RULPNhX^;#SA(SrJE(^&Hc8i%}u`G>%H6%j|I3| zy^kDa^ZEwA#Jj#cKmYr90mn4Wsp+4$Bk@?Otypx8E$?H?!tX?HkSyJ(Y^9>g5Pth} zv=bWI+cEPe7r@PF#G*4_3H0nezRP82PD2Ue312ZEe%~Fs97_JIlz7*>bj0#n97p$2 zZ>>nFEOv!PA>`Gzu)b-+ftJm!d65JfO2ppX&8yz)KWnx+jz&9YV}p-5Jz$D|J&wOph+aofMy1TA#dHkgtg4ZzhW+Q4KCvXoE4A~v?(*&1vOMu z-ppFL8KMHW_FYdg9S3U3;C*mbUr4pqUzHv!i+DTwDnxTms4B_Zqa?9kpqQ$M@8 z_7&#DvoY2vqKT!&r(B)bx*6%xWlT_-6>SvYstDs?CgPC3$!Yidn^{QpstF}a=r}vT zcrjNb>GS1644#hBUk=WThKXK*-y*NQ{TfquBbT&qk3yviH5T6fsIvJ$l&Wt^=@0Qc zKi}4?n7;$KT|xkfkTt5{&D7s$c|ymd|2Lb)m*?$Yfp#nF+PWAvx+)CTpd_g=Lnw() zGn&vjgaAdNYyzv0{}n|(6FzsW!Cj$ppf#fIH-1Qwcl(7+i8$p{5hMlxqs*8+4vu7K zG&D^&UxYF>xXm1czj4Fxy11I$pXC~D4h+bA#PI)*Q6*&yvf)PkY!7sHRBz!poDpHg zwCw;jHFbMyviFPdSF}He7|Q|-040$%=p4@1y*m0v?_yQ(Tx3=IL96|ki|*5g?G1$F zk8X6{Fx)&=a=uM`w&1$&t|ESCJoEkG?IQVUJ;iBwc=*VOb&DH#Imh6pkZwRPtuhlK zMkt(vr-Y|3IS-~{s6{NC#b+JHv1!JeXaDk18~lWLK;x8f*?Z4bzI-KN>^d))ub=+3 z)kwdk;n&*HraGTRJePeOT0a(}t9#E&*Spd-C;V4&q)@39Oy0(BCAYUnqMqM?h<{~PmmGE?<>f}FJ z@1gx3G?di5*Lx=hiT~AGrA5=eo)7LS7QP2;{I3|Zh#)ZpFYrQ{&+)r6`o11uU(<#vfNHIG^OLYxDdbYNAs8%iHN=i~wt!_8| zJjn2_t-k13=o2^IiRgPBX0Q0&uAjtMT^rh%o!GEX;Vj|cYO16v=nQm#d~2r*I{2)p zqiAx*q+4|U+Q{MJ>JzFpoF+_sysnQsRM*cX52JuSu)%<4q2_q%=KJO>8Z?VkFDW}c zB-pNea@9G|@w(Y@;~~UxzJ>p?+<_tS`jjGq@g6?QWBb@#U-&#cyW@3hA+qCkDK_fM z*vncl&&zX>uxJi#`)lB=V7A<<-`oTV3DYZ}dlH&kvrm%AH1qO}8wa{`HX;|g)$!nO zfbr=fm3SIQ(HD5w02z0k<)EF!K^_Fi=|V@x+qzkCo!YSSaBqt*Wk5ihMZcx3&D~24 zD3U3RjCV~ z*@WuO?Tm@RgCeP@F`-wjcv=03F5-ULgTA73tY5BGP7ZFdyQM(})s_TXxvhun9ULq! zH?%CaK|vKvAMI)Wk5Ve&da}1yyqK|I*Dfa{$6kPoKfEN#i91!#A*e(T;-&BnqZ5K^5e3S*vzb?>ra1?mEyRb&5RGo+>e$v_IXs>7)}) zrs}T7xI(op+rB<#Ki&F069c_6%3pg}o=F0TKu_1(pmZ$IgLSzf*uWBZ`}Pvw$@%%l3Nb1UhihOn~%eWLN`dNY*&>!wpS zBgxr0`l_E(i_L#*+P<<1RwDno?s(=BP7xO|MVfk$y_N2@QfVIs*R1k@^hXm^!Ss!$ zE2B~Y`Oahl`AYzCJWs+W5p_TNO;W}YUk43Ex^yuwFD$1IF}faV&gmc$Dh*t4zo4zk z`Zu>!zwJs0&}(%=12=afdUGJw@`=r5t~0s>Xr0FEH+t%fRPDFP0%_wVA6igUQ3dP2 z>i_J;Lb@-e7Ryxjya-Bzu)@Z48?*3!^gb(ICSa!%cn3TG=Ph1ft%O`Y@0MkqjTJX* zzXL%db)Vo(cw|3MMIO|ndYXyuk~9*fK_eh*!jPgylk?9~#$FHjhq`i>i1?MVrhPZ# zMTrIU!`%0NYb_fRK!L5^!iK2BsSn6x%M-ZB(?gWfpgbZpki0iH$!YD$zv%Nu0I*uX znS?i!>Wu8;pCBv%djd2lwu>6ldjWL!*D5>wLOeXm{eA=IW}?66LdlTIlT$;2nFdL0 zK)BmbH~XjFF=ESN*)l3<$cjITIXev6-qF4N8|DQ>N zGxCPTYXv#WBAIm(v?=Nu6z^R-_zM zAZ-c&t48sggy_>KO@Proy&oDtit?Q?toK@$&JUrwmZG*MAd|q_1n{Z%of4b* z6jXA?+@9Uy6aWrz$y}(jD#>=_PU^ntzF>CxbSjKM1Yx(e-m7eu)_76>%o(GXEj|A` zr+!4JMxt6vVUAoT=p`eKDr+Pj!7`<&J?AWRSE~XmpYGRWz2%0ZgGyHx^-h14-?IBa zGH(||qDZmTqI*QKRE#V}`Wt-CJ5yb)khN)1@su5&T+ zgdu}~x(KLfG|XE1=KMN`K%|lHeFeo@7_Hz1)fzUrODm|~xm5(eWssNHX+4Z}`3KXw zG%`$L;ps+sO|8EIsi=pJr|P&N*v@m|!=KU>A#2+fnkaH+4raRjV%-TTv>Ak7iB<*H zg?%QO=x@Bv(2;T?AvyS^PrO@nHJ-uD8+n`@WUjM3TiTbr7ZcuQ+dad} zmPeDA!jtE5bX{4){Ua@JxXM7S>br` zR|vV>`irS47{kGz{zx`|kV3sv6q`-D`YTah*{wAs;B9qufioEJ9`hpcBLH}Xzk~2b z(k@W0YxTn%5;-)g&L_=66j;tIyw9l+TkDDx-EA*e-@6T#wS z*_S<-ppcyE3TkvLneR&JZ`-|?Vhni}JFy%(i6$6^5Ngbu3hUc$*Lq+;WiomG_|>wg zu}9gK;9;#`u9x1ERW>#uX?uUC-@71^pwNWDHOAkRQ&AHhtjsG2Wg5#!aurTO3S^R< zeMneN()!~_lgMC9<+&?QAp=uf_YF;~(>Qt5hJ+LqfN(&_LP;icXIVn(M-jLrF=F)n zdjH8)y|rB98+4_nRG5A-=Otz>GEToc$0d4Tet@*IJg$#BJT~?b zPnxzh{MLPDPKKlZ#BK6~e(Qbx)@lSjrzwW$6NX^HJenw5n`dk*wc+XAE+)XToa*sI z<=8fn6t%~RKhuv^FD1zK#Ig+Vb>E^wrg0f4fV3wo$c-DhU_vC9In%Go#p9joX8X&< zVHMhYprKy-Bl>a6AD{1zM4#=fFC(IP0zOJSU6r|cnW=m@`?%GXQ8@nXcgEaL4o~5p z0-+{o7GQ!4q)Ax*qDDgGmv94R(&Y$$CLK0;tmxErd64P2JDA=0&ss`Z0 z(%2(W3=Gb9f*59ooKT-p;+b%0cM?sH{a)J0uEE^Tvy)*>Mw{j@7Y*o!ba3mMu z(o4NZ+G)a&Xr1vddghT~@i2ls?KX@PZY%bM2pUz*55mR_p+P$O& zGwH04Y;8;LGOK3W|5>z7)~3&B4LB4+>7L^=KTm90{@}8l(-_sAdt0JR0S-)4_kKWp z+as1~==JR_i=XZ50Fsl3%(MvmpQnM`i3y-Ct)kF@M)<98Pl3C^XmiHh)(SZ?@Mj1{ zuNcLe-e@HK<L0u5}#Twus;8dv1VT>Pv%nsaKu(1nD=`QhLnD`Ubwtx@w*=$Mt=dg3nTQz ze*fc8^$XvPzx`MdRnZXTKcWxVD0@;p9hP~O69SgF5==ebdNg6hbQm_t^3RF^tplw} z@leZSpI&&9i6qz`al)T(FtQboImc;)Op9j4o{lBYZCz9mEe9H=y~2M zXLg@*T8Hi`H_D%-&xk;Jt|}jtp!JfzOCo<}+fx4cUZx_K6QD&)e>&n(BLA`b8RG*4-IU$lzz{ZT%t zeD&lz1lTIQuM03_N577hC$Mru;xZu2ArppV@IC~wm$of`)5RZ>pd0G5i#>xZ49+{(mljU=BOHFA&9}#y5cHayt0!&uNPwK6hYHi=8J? z%eToW1x#ayWBnS2D?I@dueSL)W^IbRx&hi|PU5REvxmP9kQUGBd%CvY%o(`^Q>e{C za^%^mar)hFciYCl(Bh8rRHVJ5q3kV=kxbd06lAMPDtv%CbTOeFz;U+{jU9353I-`i zfro)IG-^K8HUH2+VfQ)ZESmTU>`Nf^o{4s3#XXEJheMg!|F;zkM|8NRX8^~UvNOSJ z9+^Q`eu!NoWOC6vcyH3>pdnmWdNnCOw!+=iAs*!8T(4zHhk-iL;-*8M4e&!#z<$=u zN~=HqGew)QzK{WMYN$S~PTrWbKCuVlzM#QSpaP8W($T~MfiN+q2y%ck=>mm;To(=X zkQE8>oHWK0Y0&fEsC&lUDjBZhnvVs9MQd${x2?BpSpcS?4F?qZ6juM%A0PSH2_Dy0 z@_j62b4JEw46pqCTkaq*a?+YO5a%LZmQJhhzsXQ$Bo9}akohrbS6)>(+NG}O8!(co z>o2lGZT6<*;!ddA0juI!axSH~n=18UP?=~(ZjsegG(b&{Zqcgjw5`0mLhp6b^gTVT zBwb@lk7-qKyZXe!$GX0?x|8fyL5BT$@=<&H$TMx;aqQ_g1#UP8g80X=AcxGNC&k1doO2N)gY=(6Jc3(PuZ=qzpZN5>3UM8Qku1!IK zg`x71D6fz;rP~6As>{5xk-@U6sIVD@=OE)J14GTJ1&(lf*tmLZJYPO)Nqnb)39xhwu5`Fr0#6eXV9e1_TH@BR!bz^cpfot_~4c~7*C*{i9?YOnK z{wNqhk72hnhWagEpcEamI?+%IlnD4H|IKXsBS2$@=bV|{YR0ywr)~Qq8umkxsb0pl}_s{_Wi;AMc>grjx z6y06gY{e2mexe{hl6prlp*-MdV_aqF#+N_6_}!cc^8Yz(M}In9xz#@|Mhhsj5xx@z9r-hpSJag3rj~eFNDF>V1suLfYjbn9N&?c=fbXT{E;*YqEU19KZC*wT`GY#llm+gFr-0g@1&w~n)S)AHGm6EVp5mA_>h+b;F0luUg4=QpH&@9q0jaPZ!{UAKg@Iieykb(p#(SKna``jK@_WnXn0lPlYN;)_8nq>#lMCFgkP$DH8(UW!liFPAG(Q zxc}o9sLc9TVs{u1T$bRI z1*puzu_6~EYpX&Q>B8e5(5qNpJW5}s*4;VFoPDTnFjrMW1}J;AH5b~HFGTv#iH~(B~~FZZL-m3jz)54I|Jq=1Nn#apw~vAq?e1o}tsF-E57;tIKLh)JPXQczBu zhC4}}5dGs4SOVzCyDTo`ceB*-?@euzG%obPtGT;NlNV^boC63WrtmsXQfu9Ghc;7% z#=JvoFkzsd!1w_mE#fQvr-LN z+N00u0vko`1iz|R?l2S!FglrLjk0sdidG0O;Qq2+iHDoKPA{uW`bmKta!%_wO{=y;B8ub(K&43$EK5PVvijutJb)x zlk;$@Fc6*I!16L$9BB3MoEB!!KaG&hwx+Y>h_{`RkSjoGtq_0E6>GQ7{63Gun0^6> zG!^gvDqYBzbtKMXpla@MWbUWD9NNVa@%|f6f5w1c;jRu$fYf)VM=Fq`SudS};m#k7 zzzQ(>-MZIeD(}$YQAxiHx0EVO_$lr@*Qa^7F*P3^XcKO}_b-UZ!d$O%V7wQ_?=bLs zk}opM`^!U&fXKv+aX~due6};q6N3YN;FE|eBi*n?Izzlve!s#2A zVLO9AD~(pPDBhma?ff88;z{9`>JtZ>IF|@OC19;>Nt=z|U_BA!+WyCWd2Q8zGkZR_ z=?a&LC`~Ga=IYy$00%Dp)$uSM2b*%cSikgK%}Gvlv+Z%L15|5MV1An8-b-u zMOwPMJC^PRC8WE%ySw3C^!K0n&%8Hp-kbLvMs_ZH?>Xmw&$mC{^Gz{6AK6zyvf`B91?VVI{Tg3;qM6_?aTgjqdfZdepcSElCA2hGMn&US6$VoTS&phwu z`D72}lS~aO$5lnRk;iImI>yg|4XuWweN-UfM6CA9CRTR!GN0K?FENm5`P-x>OKmG- z&J)XXT%JOal|RczG5azmqK#{JLJPR9U@b4a=Q5!inH)RTi!S1G~x3{-95$uWa{xnWv7ZJVqS&LFr z+5;^ipopx+jyMxWa)t_}6WvHM=(J*jLB)8PH*iaL=#@U$WKBW$Pps%aF&2?lA z)r8$`yYePUB8UjO`;Q zo|$T%Qf}?0ljf8wtJ}q&mb~9!dY6ko;9M=_(kI|QS3TX4Xpi{cB^xzr$y>XqZCPux zFhEFt7@E>78wgN0_(Uy@U#*;u_rNDtH4`2Rbz4+-s7DH2Uvs$$o*CWk2x$wRPuyKc z#!d_;UuSzXxb6qvE<&^WFz&|YF2s@@Hh#40c%1Y!-t|t*U7sZH`ibGAHePJk0zBIkbZ!tHmxDqVK7HhTwI0^{ohP|-*TEh~RLPFlK7zNuTYpbDUPA89 z`UI|)zbV`epD|)ab&lv<1PVDh-pwPf%gD8~M~rS~lEwI%8xIiV+DdmuLQtk?k241k zhl_cSi>5K=xtQ~%xod*jN_NpJFNE7w&rr1c8k^7Fw>J5gMtS?BV4Zz)&qBx^?!mnb z6&#xnt2axe1%A3dzD4uuhIcH8T>iBq~=s2H&Ot5yy_)SWjEkPq%QK{S}; zg646ndA~jDp7LsX+N|K-6s3|i_rv7d4uAiiT_2J-Mb+f*LapP2CJUA}BJEnE@+=m9 z0hb*lAgU{8PDz5L9ywgKuKgQd_}%pHKK1!`5&cNX4&L7TS+J|=a=kDUS9$rio64oi zu6%aHyNJwZzoxysW9#jhKjLRhhqC?z!w(I+29c02L`^0k)IUTU^SSg~95DH7fnGbm z0sGkAJIb= z)RSX+Y_i$|fRknw$7v=t_49rSGoMsS2dj+xN9c+YEXorT_I7vUt|?d&`_7)`$fe|A z&|6;xJRJ{hxc-{wG}qnxPI@1d1LXc;bcDu!}{O^SuBuPd4xGOmlKNJbWDRX%_kSm=P-Nw z5|l`rz~`hR2xZlY=~}IWiZbqc!ysHdTyqD<=s?$-d;JLKbz9idA*-$9$(3t6>&F%- z{(~qhs>UkR8l3b@M&;5U&!?B<$L9U^kl0OGzI03+?3#1NtAPI#zaju`0-L~piYzKgK zPCo_O8vR=393MCh^*OV9tbSHwL0Orm8)?MKAH9TMwT>B(0yUnzWO_8USgH845^trG zKUUXl;`?ifrxiuTuGI=#FQi4&?+0Sow$^YcRxrczWz#z~7gs`lj_W9QqLeCm$%i2; zX~ih3PnY*G0G_V#n{54=L^Ox|;R~w5bXl@W`T=Qdw3F9Od#{KL zv-W!N{RhAqG24-JtDz6vJc8kc38Y%Lo!0BaWAs#l)}NK-jG{&@%VI6?ySKFJA93=) zlmh~$F_l=HD06KLcF{U|zrqPKa5K?d_2gGT*8@H;DDyPglN7VXck;_j1rcy5_vkNt zyTj^OC~`g6FJzjn*Oum~)$>$|EZ}%@-(zLt7kM}mSM`(3WI$Cmwe1tEJu6_N4}Y2l z4f;u$A9*t30`^(3=wks&m_Fqzu(v#n!o=8tyP4@R55@o??$HxXtv&8#JTlY{#;V;@ z^=va-bScVW~kSjEzGeQT0u`&%;f5#J zH6{WR^Lmpkv%NWJIGCrQCyIkjUU31@diO`Rl?WndL%960(xi+jm+FmNeE1Vq#?x9b z!&?FQmQ+Rww8NSoT@+2)agv9wNdanPGGA)nPP(RP=o!+Ftan$t*-tl+LDT{?wbB~p zw)X}A6Wd;B*6{(#FVALhcLv~s5G7U7gmson`g+y0e&gJ*4IsA0!+0i2z_m!PqZHNC z!EYopyc<2m=QT#RHRermTt9VBWWZzDC2)^cuh0lzwkzuGk2cz7Tgq!#>HIBd;nLQm zi!Kt=A4`#|6GhpO=)K&w}UNuw}{u>rHkRn+h7&2 zCp<^Tqgu!Q{9P{$1%*9OBr}XrP18*~y1DvjAW+51GswsZt{rLGEvp>T$C&m2fJ~6o zwnH>a8VR)#{cH+c6(60){4x@oL{CO1(=jWl<&-5p{BX6Q6dqg5(|Fg~0`||lAO(HW7WrAG;P znb1XlDR(W=XH^E0*e0QCG-{N6g3*BWsnnxfmv-rMy78I3wi5*$Z_eQp!! z&V|{^o}{`Y#iVxcm!^Se(}W36pTnq>tWH05MpdgWxyG6@Zgc)%%57z=mme6VG%Pcv zY|W(4_SedpyvUoLc_*N;=|I@B{^UFDGTzK*pl3=eeN{D>pG^sR5Q+5sYENA+Q)(Gu(g!@_ zOgEOS>=Y|KD6myx>qv%T6YH8k6RcR3X4uIgVeC>5g7>*Aj6>R9nNoICE-FV_*sUql zX1)<;wkA40wnQ>hvWa0{fIYyL+wL^R8Oo8&viVjz<*PPYIi=JlDRN{pxhLK$sNToS zi8-(sRlVmYsEFa&`aHMo&u$8`wt8M56cop=n=?e1uwya(41F|ye*rB2-IJ3 zKT<@zRK%D@03{&Eo3i8EDH-sEka9iKxZg>)<#LtBg*v^ccM_(T#{6A?`2otja6Y0~ zNhi+JHzrqg3B+c~+f%8#n)#_9MmGLWSe{}gjD_&j*NZQ$?qu|3I^^Yd65fR;j~tf! zTSbv^Z7JYyK9dFxjwXDf!Jd_N?WbQ^`l#k4im+pU>4H^mx#p8e?n4OZ+H|F>9YTFNtHr#X$_^A0d$!T6|=2WY^Oprg`ZLeBgGqb&eiG_O-P=Q1;(fyrv8yiMJ zxbG{YvbmgNXI^DrjI|{@^WgsJ4oAnWjF#^X^}N6+Uk#5Vm$K(-d0oGxoT(_deY!Xg zFk*T+fR42T6Li$G5AyZqotm4PchjE)MEu^*!&vK+7EBAM&nV$CIO&n)fpc@UoY42ucftBEAN`nLl|Ms-hzhc{s>Nu&Lx&Gv{$I;#{xIao&cgFEQP3 zWg~FEYlY0&Erag5)^0cNYs0n>1y$S5kKje!5W{UDkD=>J!XXP^0T}Bx4nnK^_6Cw? zrB$)?u_&(Kbu<9@y6*vnf--7UEO3Yp93X#o9_QIdKJ60iDVn%rCNG9%SBZ2f<|COTI7j?umk7GBY>RAnKH~bDTL19M2Y$@z@wV?ms{VK*O5iQ-aTY|_ zmlrH#?nojzST(H5Qma`AL)tL$kOL=0gTY5few>XXzya^1MLKn+>Y%`)@4h)&x%#CS zKra^*lz45Vz>;P{Ul6q8J1>8Z&@@e-T+W_$RjEOi0lJ8clzbw;ytTgM)wuAIxR%>e z!AY<2N;4LrAVDRw7F4BmozyeYOE;Ewykw`@EBn9F;lqx9bYsB}o2Q`gQ_p4F?e#COm zjGBn{zzluk9rn_PU_;|_q>3Q#+eYV3=bcgjC3sxZ{|@P$i`cS`V&Hjo%>GC|cD|#_^Sp|#yuyzK6VehozV3gQ0`)ES~ldCr5Dz|mT zzruSOGkw5oI;bcVH$!IABGSS=7jT0To|+J~HXWj31(;cL#2YmF*xPmNBp!x7VBE&5 z6$k4>8GOlh$3(PKrNVRrk$+Nh@0(bDP`MmEsLHR%lxc3d{Wau+iR#9<;RsQnPq$sKIFkVEKm@Q8wF3n+{DxQ>(osU>M6?>p7lXWp9Uz6d9 zn7xTN6I@C*0~ar!Jy!XEVGU%y{`SceBrEG)y^NFPiPV{2#kKjyI$278NxGjK;3 z;v{o(Bj`uR)!#mLdNDvAnkc+r|BMv9zVN=)21+r{F&zF%$;xPLS&KihFOnWqY{IXTCF)eCkVU9zco zBFg61!sZh!+t&vpBqsH3Et305F7Tze4!LwZ($yRu&e3I#oN0HoSd)c|Ng|pO# zNotAi#T@t|8CYD2+f`Y3v@5^l|is; zl&__%TvT49vDtDS9k?am+|RxPEYS!7JGpWd zoe>y1vSoHZlgm`CPzOcGR4Rj2%eqBs^fjXlrhq#-$Bm)1vkgT)|Ahs>-M^q-TZFW= z#a!$u)F-y6p#0lM>*s{~VE@r%-bYu_NSuG7Gk&o|2A_ z2z>w}5_uQk+zoprSke?42P-9^vHFXg6+4^c+~sC{vbwj#R>)8gzH*Iuk;eAcPxt*_ zqTSaujW?ZFCmFwHu)nhlGg?mK428KTb>!(MfvAmST-^sxYrrEJHi5D2{j|&Bi4O*L z378&*_d9$A+F=46^&0K3uN!YOle-Bz=bV>@gTC!DyY7sTI|I8%VhbsBZcEPp`uJ-1 z#v0{Qm(6SMmz2YUugvyd|FmOnlnS2�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 + Data Platform VPC-SC diagram +

+ ## How to run this stage This stage can be run in isolation by prviding the necessary variables, but it's really meant to be used as part of the FAST flow after the "foundational stages" ([`00-bootstrap`](../../00-bootstrap), [`01-resman`](../../01-resman), [`02-networking`](../../02-networking-vpn) and [`02-security`](../../02-security)). @@ -131,7 +137,7 @@ terraform apply ## Demo pipeline -The application layer is out of scope of this script. As a demo purpuse only, several Cloud Composer DAGs are provided. Demos will import data from the `landing` area to the `DataLake L2` dataset suing different features. +The application layer is out of scope of this script. As a demo purpuse only, several Cloud Composer DAGs are provided. Demos will import data from the `landing` area to the `DataWarehouse Confidential` dataset suing different features. You can find examples in the `[demo](../../../../examples/data-solutions/data-platform-foundations/demo)` folder. diff --git a/fast/stages/03-data-platform/dev/diagram.png b/fast/stages/03-data-platform/dev/diagram.png index 001c6f2ab03877fbee30af775c9e21be53df197a..79b46e179e8a3a248d676537905a1ddddc7da7f2 100644 GIT binary patch literal 59453 zcmb5V1z40_)Gj=V2!co|rGRvYbc+rRgS2!v4Be%mbVxTSAV@3SNJ|Ycba$6@!`Zy& zyyrXT`o44h-@mWt5@+Ul_TJCld#!b^weA)C4kn3(L4pB+K(M5xph^%3N)`li-wypg z_~vke!Uz08aeO1Kf{u|2n9qMDyHI=x;^9S^t>~T?LsfG%U=xf@ejo#KmHKKFiIL^HqBtXYg+5%?ADU! zXx(YU+E(4xVg02`O{H_hN`>`jrY*+tXp`W~`wSc*U!_9yA+PVtQM{&nvIz0-;+#?4 zi~J@*0eJ&?)C=+7Tl*^&p1zx(oR^obr>?G!nd*2qeMpdiVK(O7e<18HaW?M0dhPV) ze||IgD2ny&2Phps5*6}6x^2Z3T8loEEKQ2PK?%No3ay3wP5MBxZug!_C&Yr0n^qVp z4tnGvYPfq0@*mHG8$rWK`+pAbf86kztJ*nhqbT7d+*Fq4>(S|q&+Cp9wp|-b^Q1ox z_aLvSUm{UIn14x+t6Xe0$(krFXt?|{iXEI5cU;6X>W|IXs&r|mX=l@` zQc)dg-Fv=cxhHaj7_87zb1rvIGz`;Bs|54h?mE=XrK_Vb8$>x2R}^x*vi4BZ97(cN z#8Vfl7UH0J>6bwSflQMgZQOrd{lfh=Yxktsd1{oPpLO!`K(ImB+eY4o`~^K*s?Pg& z(XRX2Hht&GswrxSbiu>!D_AcmWnX_j2_(1JsQ?~(Q_=&P@MOz-TamHWDSQ1!;L?$=^jiW5J zMzV$)Wf!trn#aZ&JaFzY#5a^B?A_ekiu_H73W1zrffN5J4iDYDoJ5Sk&zD4AqNGz6N*lvb z-LZ$cj&(6#s#`*rnGTz3RG*WTmPN3nE;wEi89|NNN&KdQGKsVuNprF1g!rsxd#78T zQwp4&EJRcy7AH^z8bom31+YYqEpZdUb7_P8)JhI7ufTJ&tN|40OQ-jM+?`Q?ll>D( zdQ>U_FSMnlR8_S?j4dylU{6ypu`!MJ^bpl)J0}Hs2-xH$F`U!X5c6ByYw}$_QXsp8 znhmqP7hyXy^R()`GI1O#8+t6^%}()*W^k>6Dr&pFaI#xdRWMC*pZQkZh3mJ}(>oAd*`)zDVZ+QLxue+h)mC3M-+?Y>RFC zAo{m+uD<+IEArtfW3tY`sP(m|LW5xhcU@X~psOg?M_V!oq(y2zRkHRmgk9sv-TK9o ztua+UoDQgJRIwM-`fhmtuYSwl1!9^-p9gl43^3r!_s*Kfhd!J$LBc> zwuWA4sC%CF)k;t%^XL9?Ncg~a@l}BkqCfo&{7aj*T%HXssRW=+bA)>Te=Eb@R}UdE zm_}EhZ#{O%T(~+D8?X9aEa`&zC)NTD`rEiwaLRMnfVX5!bXWWyIY~DEt7(G3nJoebx5#__a$;h)D6PBN(2r^WXx$=HW z0D;ibeDuAbx(69p`{m467{!8Ov@Pm$;>733m3(x2?dwCA%KwDvZVSHPYyjH{eHx~F zHw>8NzvFd)ms)>DPlw!zpL_)~+V!fW#;@h)c7tu+(pmPFG7O zmvOT?9?X=M5LgX%cazm@;e+*#`GbXPx;Ig~C{~1lt3wT5`wxvUaEZe%20F47U034K zfMCB?XSTKX5`w%(Z(Rc**oG_U-yyke~$m}T{6PsQwnYJk-Caat9 z>_A7}M%N)>{}a|RoraNjV?^4z<<_h@2vkU-$lY!%n{4ftIiF(b_!dlbVF z)d0dd&qBI+MLm6vH1*k-F^|Ye)s!F8@k4L=C{)>Q4A}#}o?s$iQrXk)G)7mCKGJM8 z8#SS1c=+=uT`qOND5f8d_7`J@at8|8)CoMZ^!e!fkl)64rvkM9FvBfiITGtx)yH&d zoT#dMiLr}(kIx&NJbPQr4mVCt`EQndg-u7MIT1m>Ur9d;lW6B3i4R=|;r z)ocYEgr|G{Kdo5=_b9SHrPeB^%ILuwSGO{ES|-_rYPSx|B){MYkvSx4+c0n za=Lw0h2VNSmOw7R>GXYSW#%#$o3`;C*aMUQdRqy_a2gM@=vtDp=rJ;yaDkkOfkUV7 zfcxMjjW7rDI}iZ#5C5*re+L(Vo%=74nGpYdhzR+b5K=sd(eFcU={?9N6tE#g!TCQP zP7rJ;L0`bgMrgW}vU~19a8~ZltByUQLDyDS;+vRln3G0kNat1~Qq72qc(4YX(QoW9 zLWsoT;kl}6xD!KWcz(V}hUnd7gM990Pc5g)A>}%4k03?>%|S~BMgr|W#OZ(QpBkVH zdmC@!x5!R3qh9*@*1)GRQ6LaI-n(9UwS7E>^23}hhW%o;6gh5 zsfFShS$e)KmcJ?RC%06DO%ij+wSglXb*DIXQ|PZE4c*6>ZG1AbWBx3x$#S-@6ZSz1>-3$h+3Bse2NfuPpK&aA95M-qLJ6#J@E(&y%1H3r{S0;Xm{?cd z+S!?@velE7#l-!do4Yq%!^y#6e^j?O*K~{gE()xa7wBDr#WwpUY}Go zUGGQw7LIM9+1UM^7n6?Wu^wl?@VW=lcesPlr!sgqc~ZI=xm~h2WlP!miKNEE7*>be zpM#Mnu;cK8k4=>YS;SofV`Hbioc-I=HIA#jNl>Tji{rI)&)vGY>)myKoxs*#V62HU zv(uxa`Xi()2L}f~KfizF{^j+Pz*c?s?a2x&b6}`230a}8ufP#`eK+!Y$^;Vs(8*D0 zFUbBaUih0#MMk;U@>dgASLRh0HIEukXFav5;8+1QP!(7%+GGiJtc$yMq_R4hDXF)`_Hs!^lNu zcd^AEPq@K&V7Z8^bIQxh8ynLdefAgI4-O8vtwyuIe{b0DAZ1OkT0^AS+uPgL?@IuO z$J`T9)4E{C_dGm2oSU25-QE52WXHCR_c$%*>0)v+ap8sEVqp^YWjl zBCtl2S3A9Uxd7LfUzEtHw{tEsA1R8^7lJ1j2*lIvDlYnYg< zB#JNrsXzxX{}*gp&1kN1boY&}0%SsZlj29M)4 z(c2md^scV1v0@$4>V}~WudSjgMn=XkiKVPak>uoLO)ag*c=U(b1 zx-2X#-e(Jel7|t%1eV_E1mW7*zW6n})-~~8MJ}U@&qw4fG&D4hkB>ip{``%b*LGG; zK><6U37kDB0s4b-O&jy)MT6$g6W_?m^^P^&91nz>!>hCkMglU;$|j~~XGQ3hBRh?F zQv7?Ok2KIK#vP!0TV*>ZVn>=a zXwFVltk(pCUSD5>7ku$jENk$`p!w$JW{{NX2w13(22Sq`3>G$qa{YTcBVJ&Jf2L<- z#1pq)X!#sU$i|b>7ftQ#o=bT_y&q|hx*9U)>V&3ZYE*z zxK!qWVWTEcvd{4G;nt!}=ewzeg@tvJd2WL@LT)(uQMd`E>(sem)lV_62h*jy9gnDU zlY~>C1IeZ8kHMK9H-0s-bD~jZ+LyvxQd#LT|1gEu)@LP7J>BQRq9bv_TDQT&+0Gm6 zfw%W{iSPB+*_m5l>;7?x?~FN@Zmm;ZW##DJX+m5a@#BEOdIoUVC>DwvI3VoT|Db29 zbp?dGf_ne-G%AN_&+k4m&%Wav)tc)-dUKPP@anC%X&6!6Z?GfJt}(7p6SgE&!x}{p z?%LYZKNYP#Jw2_hnT>kQxf&0;nVKhvB&5O}XQ!sD*oh>9)RxeRnyNtwy@pgR`800-+rD{E?hd2lX_aA6qrZ!yT!X<-#tA<*vr3SWrcrI zx3aX{+}Z+Xbar+YUN!-wRstrE^Xb#4{$L6tBcnhaTP_kbEL1WQEELG^?9V{i=Ol)c z@~$o~bMf$KGRN=v-d>{EQUQBHgnnn7h1=WPn*&9F1qp+I&tVe>k1gCEdME)sTzZGR zj7}o0j-ptBjrqOS>h<3UMf`P_@S0|w#`MaDKny6G3Zv1yo(8og~TsZ3O?Hpy1A&)pQWL7C zM4|#mpzA((eJ@(Xm)8MOgp0a0X}Xj$Wya823a}3v{|To2+kXq64kQTg`}gnvERh`R zeSjuR?xq4E^8G&}Indzzf7(BO4J~e%?gx5xRn@royY}pY^C-H@7^o`@*0GV18tvi% z*~7JdY}WFsyB0V~`0QD7pDCq-KpHQ68oek|{~5{{cCVrSsDEkVn?1OkhIYMMlw*2w zvJ4am3DB!g;D4LZ$UmLDO6e<5E5cy)z1r`D<#HY&-(m|BXjglkI{*`6e(i^f>1W~M zrozh900$nZ?9n2vw^kB-6?IdxOBEslrHQ?Juy_+ifC0n7UjoEwxY7%?;-JBmtAC)=QWefHHtf!wr=|K-b< z$nPKWF#d(Eca9}!nfU(!xn3quSXZK;J%QE|;Lw7xf5%YeU~}zkWEB_h_9k&gv7*YU z206V7aT16}x372%ckk{N5cGJ#svzbgk&WrlPmMG(O$@3zHOoHtYP4rY3rlAX zyzX*oEVf(YgF!PtjWcNb;5lbwd*&#gEXkDP3=*)463ZAhol2MbKS9WUPxpU{W&Z1Y{kLz3rqcPqZV;B2PlEn{ zK-?hA9wDwcY|f=wq(&gF2yMd#+k#`0DT*`+<9{Ae3>JTPx3aRbxR^DgpAOv*mMaT` zA$ohmA|n-~rGtZm#p>_8FdX?ze&kB3U>YJIAfTh8BPWMeRTZsqdEX6KdeEq)lR1ne z;BdH@*vCQhF#V5r{;K|SamQ?{vI$t4zz7n#czP*0E~h#IIsoH=K7h^YXlwga^od=K zwP}2yq-osjpa5?vqsYv4LYIJEaf_|oZI#+hdfs&cgO&>MiM2#~!f5xeIf@*5QInMp zzJ*Erx6?iaC%Vn2DyPGXkEO!NbmE4V*YK908Kbi^mWnv^y7+&F+}Ap4X@-x7TToNf zYsalDT{gVr@XmHN>$HYwDK(afAL?n;3$_xx9t!vsGAUJ+m9_MDp%utNYGl5uTf=NX zz{A|38ke2Pqobo>RR_cOCOVq- zhqayPRsOsxYSXKhu3LRF$|}kqsa8_ep4hl@0%0+dPwO#IC3I#|qx>IaFwzUjVA~8b z{r;1MOiZp!h|&56p~Eu8O;+NIQU^DZdxP~Le54yk080*LB8KMCU-AE(+A%|<5?cYl z?ngmQLvwt3IyOAatk=ur0#C&sHByIUwi`ZTt*WS)sdq2S&VEqFA;*&%lVAEfw?ZQ8Oi@ME z()q7KwQ(ulQ6LG^E#`k|vI5n3 zKkV>B{=?WQjxF;=9o27J!p5#W5`6>d^Mc8hx~=%fu_mUOpBzakLK>y28XB&FXYqE- ziYpoT2-(@$EiEkoM~UIo*45e0)=x}KSX5{d8_~u{XPs~7OR1`=%E-t7*Mz9&Nk(g5 zIgAzUfkt%T`D}!pa&n4npRNYe!ArCT!6!eXUkmV_Kj5BeTP)9qJr0xowLr$sddwM~ z!lfNg?VdQk3?E@ZA1(@lVUrfe*uHkg%yw3`{D21KR_r&-hCDK={(`a8)8`BmI|yy% zwW*bL4uy({S*k9>;;=VXv)(y}QlsDBxSFOaeJmaRv|9RaxYnRSVfA=_IV&rtG?~>< zWnN}y>#~96UIbN*L^ic3Lv-?2GY+NKcq88gf0yH_MiuAhXLucS{hny^qn6eLKpU6? zmS?g*Qh1n{m^eAhs;W-AnozX|L&9$YSS;s{q@BI#?*$c@Cw ze-I?X3xE0mFF5%sUwxHfxo7Nj)=_amWJ1*@bPmZR6)na!yF%|=wYdsSS2TW!-bO^| z-3u%HGhh`fk^BvnRt1yO6+^QGem|u$R7$e9q?B5Wfs9qn@2?%_dHkFqRq#>tKI`=s zl}eQ>fd=}0RH6j0UKsP(d=TNxsftn%nc~w8&7#rKQ8h6fIa=j6Z~U6|DJUa5IgL8P z_#Iatps_rrMt}3>O-nS5?Be1gt8P7?dHlnazR{r}AkBDuQZeCs*Cw`<_z%L}@7um!fU<;53JJ+?y#c?dqwKpNqjiIl{-jVnhdzM` z=a;7>wk$G?l5YTNRi(iYbRdIC^-~CEn#3Y`Pl3i4tErs0%v`5Guq@FeqEC4 zh^U!?19_&QFe+u1&&j07}23}N%6mO;qV&tbptw9e) zz_)y6Ywy}ksjSxqEvRe#kF;DECwZWf**!#C8yog~&$Eb4=UwXjvux33ENMf47#dnx zZT+5ofj9?VI5@>W^_zbu5mQhOv!86_wwNamQuoeihqKaqW zds|ziE9ROViFaW2Nt((_Vc}~K!|^A1xK`iTD8j>2`Qr!r(3V7eX6Y{>rM1SdbQGmT zOWj|jRcN1pZeIlaW7 zoVmHV`G&ua7bTH3XjuVV#fI4d{{d=g8F_guga}V8b5BxI5(qPp_0Mncy?7D`aOQjF z#K4z+i6o6@%FX*6neW}u4!gDgXL076B83Z^k0Av=2M{eB(R;j2?3So|8P4$e{y6bE+HXMYlu=x zRb%}Ay9kk)pv48U2As-5eIiRfNw%*FyqSD-0P(Y@97Gkrn&;mTlgP54$1=;LH#IhX zU!)e(#r5VNn`X{M5-w3@+=Z7rG%+^D`*-B##;2F>na0BNT+&MZNd5N)WW9kA8Gn?B zm0MJ&f}E&A18XdnHlIVqvPsdW_o@HPqaYv7*wCWC(bUwmGvMkXc^t64y)711Jhekc zqWYGPA?))GI`KbUEi|?TGfm<+2OUq+dS^25GF<)e&D3ZG}qt);_YQTYoi?jL#1!u~>4DH@1f@*i4#FvA0vr ze0v~9B;Y+R{AI;Jgt$EEj}lm`R_+W|a6&>BD&sbw;u*W;xT`(fM7fw;BUCzy1gK&} zM}=sCt+<4Qt{Dtf<>in2Fb_8*)cAa#wDMQ+KW--`cY(zPcRvvg#QmNxr`oE5n*XUb zBEwPF=3g!VHDa**<#diqHj{KTwKPg6J9~!^S!BCmO~#K{4wu8#J~1Y&hpp8|&sv3* zRmdu*)Yv^>vi=b|DRAL_hU>o0fI}Cez72(Bma_BM3_DYQuCXvWx<8;2 z>Es_7NObfSt>e9{tSr!51_s}BOUP>p*RJ5A)?|^n0DD$dxej=U;o#xp<8DaAlOQtQ zh7E<&ceIdh818-!Qqnj}<{`tt*GLU?wkCoZe$4U6WvD{E(V zL72wi)G!RVD;(UAtiih%)K+w}p(kru<_16P`di)z+qPw4}}pJq{i1*l`)%u(!19}zuV68bQu zmV?EeDo?6zMH#}$WrJSDK)w-@nHU?JO&>C~V;TnHc~d(l`+b!B{51gUyr{*^%{NH( zyazU}o!FE(MIsg~QEHpSGr|@R!Uw>Y6Bo;tg_4BRGB9*mR`Brfz@UkBZu^EnC>pz3 zg!S|Df4m`jqV4xO3|BFcHMiwms-rlT@)ZMmo8lPmQ!f%bfF5PcCvgdObHb_kflic# zdNhczu-L2*>z^_JP1_Ys17a>-F`qqKlQJJjC7r#^X8!UuL~%$UhY~@oJ`BkU-o3&N zF2}?h^hQO}dN4wB` zsf3^hVgnmaKq-R8bwVm{*Z7ai#huB5eDNR(L|P%g%Rg_SL)aM%JSaY_`@3Kn5T<$8 zvL=KEb(mQGd`&U$B(Su!6udt0?QJx55eV?jMsEVt?|wkN=5>Cs0@UKEUgf&uubhRn z*0tLWPeCV%7q~M&Y#ZFZZ-hn`64ibmTcM$But>}mj+`Cxy_&bu)3%9dxE8Ka8}s^k zg^X-$*zrMrx*VGtx(!svp4?^)o%lP$W-BMFP<_kg4WDbeIqCDg**7YsJ`rsAwZD3) zfG_dRd1W;vPys(mx1_H}%H4d$?^AW6L6uWY1Jw9c#BltafLG3ejJI8xO~Eq+OV{;$ z+voD^v-7fp0QmIaOiD6=0u&y(7imjwv9)>K)O6iW6ti$MM=%|EX**U$GS#m-wl`gR zlqb4-8@T6dK#B24kwM_nsXtxV^JII%Ub@?|Vt1yFx4K@x+0XrObw*1dEiH|$;YdkL zOiWt3%c`Vd6p4Jr+8+9f%=Y)j$@NOZP_wAF&-XcwtEJs;rs7z2?VA2=YnRU7{Jn=| z%C6R$P8k+0*PaV(l2yf8e|v6^kDDecF2*;K?WL8?2CjDq)vb;uX|4KYZOONOp~s%*}>5TcEC$4i*%lCZu7r=7{4S8JkYNM0AAv$57( zQZ2zt9kLSJGty9yS)LOyRM*azjflLiBKM{-ZDS{CS-P335dC_@FBG<)uG?8nh@JVq z`qC*SB}Ge13j`by{Gx7u=Ru;SAV0s-dV(@!@%(U&aFm*}U5bRZ7D9DGw3)5*NPdvd}V~;`AQXlji-+v-e9$`4_f( zKJ2kK?a2=Vhm8k>=lo&gfI?!~3MF__K*X{LwCHJlDg!G9)44;S_s1ADYI zQ!9Lq>mB39IF;~Uy^0C?akc!trp!TD*Eh7Ht|F_dbM@?G4xV2#nHm-S_dsi<&qmnS zr@(8cbRxmF9Ih=G86;(5OU8G&Ub)iD(5bJD?nluTt-&MoQ$L4U)|R~B43U*0P<#0# zJ%7`=TE^5E?ykRkEU~2}Df*I9T#-z->TEnIdGbOcOSfv}BWjX`tI!7>JaOrGWc1P+ z;Tm_jQ@|+pD*ySI8SxrHYyN+EwP1j6pHFYI2&zgfV z`H8#8(~30e++bxD1r&liQtjdm5|`hLn0oqk8a)b}P2sEYs+cWT-^71?+nL@V{!MY$cNM+afDk6>2+|94f5Ha^c-DppoCVo z=|Z02j+zbS*@avsH8okkzI%>@C@mf#0-stX^mW9gS};v}*8QUS3gAUy$QsP1xG0nuEb$WJIfYQGKQWmrwjM>IANpuKUWtv*xF{dU5&-lQ_`OP7L?i<2o^rVxki@n0Yk24sbYoBMj# zwF$VMQ{@&zvkjgNx_e)bXrz;QZPS^1nr|NtktfsQ>eM=I0BMU9I`{*;RXyM9<8QY0 zzkYGB?VWtCoSvS}$;o+ilby?mI3H`QJ{hS}h(6d*7F0c1KHOVf%l5kdW-x(*srUZ0K4zIyycQJ?^{??Kxhgw^bwkw!y_O&OgKBnOn5iqorP=$-Z@J>-FP7?7(i=p-=AA zg43M!#*ccJGI~0eYM*u1P}3Fs!D#-^f@5rpm;j_)w=^hwE<&`MfL{2~p2|!G~Xt+>!A2xa6dVY)zi>R6V|BHqI**De5G4`!>^$ zZN}6|HT!5=dCBz>lAm8*SxH({8`-v>Tam}B@A_Nih8`PHp-Y$b*|Yj5LEAD zMO+-0?a}M{uC!mcK1uU*Yi-#{dDh^#K7F2FyWJZ*6gRd-s;Q7#ys_a(*_(!Fc>y3@ zwdd*XT88fp$e&KuIMU(TOq71Ft-auFI`0F<54h;o*4sJqDL(t5dUl8eW(^Qg^}Wpl zz7ZWQEl6%(0z)A$FHakjS5RPO{_NMUU%=f44MdLC`ZM&(Oyw;sEM#Q5mm)=djyFeM zQ{Zg7$V*Alv#|8_^e{0pc6WEnNK5~ku=Ym+KzW{l(LVil=rICO=W~4lvR&e#&yG({ z@CLhL==|G#HohkW{aHICeq4nXV!=hCiZynKllyhJ{F8f`X}xdZt24717Aq@HHlwTV z@c5(HaZXidj$b*^eqrF+-d6F~ASbulG_O+CX*?g8Ja-OPTddEov{%%a?K&LeDM`~) zOHPO;IqjRl)~%mhKSg_>c-CF4>Rz)^3VREEO1O3VcXPq_3_(>ZSYivGtEOiiEOk

g4uXPfvr7?)3N+cDu3@8N6OXu40@` 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

7Z@{}HeodYrkEbQoZ6LE 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 Rj5+BCi3B(NJ%_-gzX9b#H7Ec8 literal 117820 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 z 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 z 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

60Dy#_9O&7MfWWimFNv40b6D^{pAWfy zjqM>6R_|XNnOBUT0ww1K{SCgYeqYmt99xd9o;|DAEH->+(ew5}Npc0ATyC-y6cGU( z?p}7Wt^Ibo-RjpCc*#y4G#t(Ww^d<`7pGxjXNS}n`_voPlf8AwRznOJNCP#nlQKu2 zC&T#)+`4(Kt$(ii9d*38LIDf@pTR+pT!1aDQ*NkdWYq5vuc@d85+<7yRgn}hT0ku? zAD*uEr_}=sR$k5#DO(ML3`L(7AU6Rbzl;^+)qF7@ddun-2Sx_dd?yBf7f5ifH|BleBF!T3+chmVD_nLgox^H4+bpEU3>QxsLf>-wRqZ|7{I;nU0 z`CHC@_gY$7s)-%b@8V?Jo&Yt5dINxEksuae*ZqhKv;-Di8ZH2kHK-WJ4w9%CSBhJT zV^DhG`OpDMjVPrHgUxuwf zqA)X}`@bKOcOHsDm=5X5T|vN8Q9NEmczDZU^ENJKAZN?b!g7)c0alRGYqk_VTTL~! zfso7B72!)sDdlYu@NI`2NlyR@0?CNgfh-hs44cmPSI{l#TeBPcP#Z2YY4shHw@JM~ z0bld&A!%uW)IVec^2<7NDjO z+hYON6PRs~AvF6zrlnFm<6vF%-CWb>>}Uu0S%VyPAh7VbdvSwIBR+u zrI3)+qY)SDM6O>K>jZiX(?%Zl{GhZj#lp%8i~iO-nR|gW@cr)Y?qbIr2Pq?4fF9dx zfS4GYpcjNTb`20$owF7xj&=favPGa-74|EoUeXs}Ft&0(Lyu?f4wudalfmh0ed%~Jd^!lZSp*CXkusxEbm1`-_uuCA_=Ba=T5P!yx7Z&_c4$hZZM z&rauc<(0M!rZ{>S>b`^#YdE2UmANJ6{l2oYvZ?7g^t}SSHv1)!HAPGN!GrUyXRX!x zWx^R-6@KR%K=psT7%eL=|6XG|0;V;-GFyf46R?dP`Iazoe|I!U9>8T3XbJ@<$O0LO zB4vwIpr=%;NYw{+1d!sObJ2a~kf>My2tK5uS=iW?1U1ew2BB31jNTOr{z|nfy=p5I z+lj*VelPc;`4_Ga4-cax4#Kuu(VWy)MBkj8cm>i>19*8<;cR7Pwbu&E5|!HC+5#Mn zfq?;q;3+8J8gk&2o3vic0iJ%9`js>-1SYe`U!TE2jnk;H1`z(JC<5eYa=`a9WvJ(C zAHWGYI5@BnaAE%#I8q6_b#EW8uCC5P3m7-M+O%aYibg~Y#bmX$4DAruf0Td&YvPyS z&K6x0p9eYWrAAHH1bh22a%>wxlmaw*_|w?$-SYt~lsGKdNMsNV)otcDD;A#n9qJI^ z*x*)YV1+AWW-w!N>es9RL2T#fxVn1`@dcP!WVc|kMX;|0LBpgF;RB+3_w4 ztQFaMZw@A>PwrqY=qk0SM`cwN_YHg<9UU={ZGeU!aJG#@HVHizVBH#^(QUGcc0SBZ z%%oQT9JRH$oSY%&3i}dV=d-2mSO}z015P>a%@*mfLWGY6dJR0^&(6+1fBt-M;GS9t zYpS}s8crYB-!w|bGR1u07Qe6VuDb~*D$0!1^jk%I6%CfWjgk#nqq>46_3W9zZvE^w zz~m4j$wg6ui+5|7Ru&dO(1-Vk zBBq_;WEe7cV}j{a!P>h%Q?|$ua(&Tr+8}TWvCt00!t5}&@INpc5cQ!jYaok-TvwC} zX^tSO65{0CM$yD0>t`^RzOW9#HAT2Ic!S69>j+`LGG$i>L~PaoHZt#YbiA4cg9?GJ_(fb(X;XuH_p?O~?sO=XxaZS?wPb6yeYzO;$dzC*0dbF`V zd7ST$!#Z>Yg@S?9yS-M`Kfl$oo;cqhM5})HF1JG5*Vp&A_4f9*nEFbsXmHxifPG{$n(^F75$dL-Y#;)%Mff#7;jquG34b8hW%(+aSgKLFo z%nK}gQ)43-0>88EKNl6CIs#%lx@G$N@cI^f@SQtFg@rE`rMa^>M+!SND6PLX!3h8Y zS}2QM3TkU}7^vz<^aOVMZ_4KJiVJ?gkWF8AH$>Y&?83F^lsttKgl6&HV2;#v4#Ste zF`W~ztig(c#zl?3y^_*p-ZerQjiISEH{q&>)BpT)?Yz<#>NgXuC_w|DhC%d3uk4?r z@R#Z7>GJdoPJ-|*XqJ+a>HvKHCSC{um2i#su}dJ$w1WV01OEl61@L;wmFaANTW?)# zLhq`n1+@u&yDe!*JoH=jc6Xb)e7T{#^&6Zl;Po<`YH$sh=tHf)Z*UjzmFe`Z?*4Q? z9n>UeUr}Ho#K}$Kvb-Li8z-c}m)4JkK+okXJ!+%!Tau1;&Bm>^BZbpENBWm~iNzGRJQnWNRf5Urtdhk)WU+_@8~cM2!N&F{@3^HFeYmy4$M0a$-Bst)D)#wvWtC>q7NAnX7G z;JZjMD?d?+GKC*Lh}PFM)sJA}J|$eo4SWy!V7?#@m44qZ({pLYrI+2#UU1|+nbu;eI_ULzdJ4t6a#{5y zYZw~#osG&DmVWkTnA{!av#-@R_kH*YH7|^+Vba9s61-z7e}KUcb^5p@psJ)4v6Y>b zkzw@U!BYs%K#j?CFd{xSwrzzHm)-b7a@lQ*aA~_DVx+sj|L4X=(304tYtOD=?~*uy zbuv$Jt)x@ty-SI4v&_~87CJaz5l|8E_JdK@*C$VN4epo+y`;FAy_c@#01N9W|ayu_?UPzMz0~etvG32s$C(TmAmP89k*L zV(s1EzYjp_1jJYL^m@)d65)k_3kQ$=0S+XSS&dM8c5i}H-*K_n*ElupSL-81elUwL zna%SrD3TfYR9Ydc0LxaZP?;!98l{5;A2j(Bc6UrhM#is@An^1MT=_?WuEKq6|M2ke zSQX|_2{lsJJKEaXo8M|n;F7_&^bv9~h&H;|eGW8? zMn*==S(a0Y;BQ9m_F-o8e6xVIOQCg_Yf8kZyq^EBH*%^;vXpf?PogTWZe8I!@rx z-iR7*pgKz;499Jp1&HU2s;wf$X(nKiLm)(wsa-UJQjUNCYz87Zh_E1QdkI~_#AFsE zJ3yq1Q3x-gRS-d6WW!sOLM#@iw?xtEs8E-9CYH%6IsIi4=t1iY7up z59d30wSUSCQ1T^_vLoNVoq$3S_{@Q<`}dDoJLJVQxIxMob>c&o|%_HGeqm4;y}V1 z(}z=-KyesmwiOIkQYB05yms7}PQe8{tZ~I5umU13OY#yDZ4dfHK|1T=puW}UgGcOQ zqIiMkO%r1aMPFQ#`-+*8Ii`61LlZp9Oo?MJ)Ez*53BxEr`)cy==bfkcszvdhpQ807 z_zOs!uXlkXlND=eTXSo)IEj1pFvt@|4oo}3Wo}Sr*x<50T(EhV4^drNnSECjm9ni3 z9F|#iN{_&)C)Yl%^@5`$Sa&-(biuVWyR8p{om>MMDGIFt19kOZaCH6y(n0bb-y!!V z3YG+=lmfaZH^ZcpLtw$6vSbrUH}W;t!E&GfD5-ci)(;tJwR`*8dr7U0jb5N>1wWIK zk!`j^#0&`w7uXD_gC&|j%}Y3;+=Iwa>izM%>gssdM{xGuL}^%o+R-0wTQa6b2f*%x^Ca(iQZhqxb2HRsl~*_C6UNNKeTHDB zGWqTGmFaWT*Ffz?fjXvZ@k$O0I-<;|1)IUvmU)*`Ar8XMM=fmTIx$px(wGvJS6HSy zcZgoGcG2lI14qktGrxh%FznQpbZ~PM8eqPyJ`J+A+(&FoGVrE z)B}^}KWmSI;I2-=P2210g6w#2U!O(0`3KN&a-v{p;q<-h)eNy0L^UWO zB1m$#xc}5I4C;?TMb#(^45=_ED`k&wfEE}mny>#vUnwfRrnPDQWACOElYp+awsIQ( z&oNySOWLYQJIChzYX)pL_WWV_qK*pe>|}T$%o#?sv1f4HovnN%B_ktaVq#)%UpBC6 zPX4{CltyGN402rHH~c_^ELNTmJUTb)VRR{X2EJn6&?iymTsZt6bde(R1)2w|Qalzs zli75aEiEkY=Q$u3N_Usj_H9^rp*9Ql+xSFz`kv^wpSaZr{%cS$5%rR>j$6AyiB6x^ z6AE+szkKlm9WB(U4Ypna^DehUxpDIe$PbyntKatfbBYplt1`!qcmA^c8-(ZN1az)K z8uhFPb_>dKgpl*mhy7<%`&mcnK98$e@AR-pNq3Z^Dvb*LZ#K$l$xn*ghSi`ht{OKYl>k zpCvJzS>?0c+`iXyFE2=#`TB|-vOX<_^YnpNGpu^tSwUyvj2+8b3(O#i!inpDmVO_5 z4=u0IU$v>8?6a!YDT(|u^Vvr{JQsA}6${K3)K)gZzra>NDI6)pfg6ULa&|V2*lnp6 z!Qut6Sdi+D=(JP26`qU55*4i`c;#m>O{_e`IozLp_{-Vt=pOO75>`SYWTJs#SJ z5H_k-28HI%%eyS8LqS|{@eit?6ZOdPZ|RPr2loxs?omW2A?!i*|jOsx#91~^>TG053bVx`cjC2RdT{PIQ6 z;Cpcu7V9Rsli39TT7azBT1c9kU2`vi{pGVA_+4n ze*{$a0_1bET&EH!w#QXd$p}39lcK6Aq}$snXD{n+nWq-g_O<393Rk!Kv;3N=F1S?mM&9i=34K7JEla!as%>hx zn5p1eL~xKs*!g37!L_2+Z?TQuxlVh<#qxrrH|FSY;<%%e<(UZm*3DG!Wma*<%W+y1 zUbk~_05c>dSSU-|P*i&M&%y#<)seE_ADN~|BeGm3N2X84QsISV^pk3F^KVMXUrKw= zJ8ep!)$rUzCcMRvwL1#PuNRUQOqd9NYnB}0dR&F#XA36MSB4EFOsQ5;+m}NpwN52- z#Od39UVkYaXktR0!=%P_Bj?Q##yh|2A#6G##(bMcsRvj=$wEe5pL3Vyw*-(uTOkHw zODrV+dcx_Z&#$q(`_tnmAydP+2zrj7t74+0?p$q3?DwBg}< zwbbruSCEg_UsfxwFuQqG6f~V02GPj|oLE6bBc((+!z5@=x#SL{HuzsqC^_x-89eMYlgly8y%Ae+mon zxgK?LkAG%K(P$@~W_`1DA|J)Yt6?FDsuex#`$DH>R7KLiYd)+;$hg#&Rj0V^$=vE6 zz9<;5)UjCF2w%nY+3JlTp_fQ4Bzu{k-yuDcFfgg6K@`G~Mf0-db%$>>d$W_5>=1rd zuUX5)C+g{qwfLgd-~2#(*3*Nf58>pgQG0d1ZPzT% zI3fzO4O8?;2~O;1%9PXdI}%>=%IJ!UQ2sio^F>1_i>R}blX_APd-S}Tec>Dlv65o( zSC&j!Hlkl1TjDg*8mnwpK^@#e_k5f+G=d8$L_|9Hnz`x z%PU{|`=6ei%e9I*-;TdM$ze_HRjc2eT0r?4rHV88l|Bf}1f(SK|jXSS>& zQf8V57JIZNceWsAwqvWD6}496lRBTQ4__O2&BPm+KQ;NBduew#R{o=T{1X?R za4U52j~h+~!siYm)#fjJQw`IuiXU-O;+~q9Fi)Rn;Mt=|I4zfo1|SF%oYsWM#$ugf z@J>2%5D7wwVTJ^jPQ@$9;!L_qW5TJqjGQ0tY~JaZ_m?ju@YsZxm3qyhS8CmMjsiD- z%ZO6nrzDubw?=5@oaq$q|9_Sei>r%*&%etH(j+jU8_TWzzNBGw?eT9#Dc}00 zR=UkybpNJVFjqWEZxIB?_@&z=pYq@$#+N%&*ql8?MWM>wiy_P`k{Xu!GYNb6JfwSa zw2HCaTZhl3B$^d{64nSvq+^AzAdmM#a^yeV!aePH6iAaEFyWWW zDKJ+4zQPw7S}U?Fnk^3Y%bG+cf~BwJ5ttBSLL=K|?eBlNv5-uq-w0o4f@$z@MJmZ9;+u#xy2V+PUD_wz zs!Jby>lyNFu%6{gig6-bK2;z7*}916!U?<+!$iz4Iqa6dY8NzMd97#EExDMgFz+AD zSSNL+2fte~TL}^{L&^ug`()M}de}1tsIw{c(o&rxgnJG6T^o}#bU78|rXFElAw!sL z-iK0R&ju#X=hemOANVBNd!Gjqel!ovr@hTWY^D^G`au(+`RRkJ)_$oDya6}^$CDc?;i`yE?!!1OQ7q;}_ZG>pI@9{?R{ zr=lFAR^Mh2nqPP8z?aGW;*|RBLzLJ9cWwj%v4gxOOk&TSE3C)p8uV*@rq!pMwCA#IGZCXZYjAI7Eql_z9R*JVrFHoBBRi&ZfQQ zy@Vsl6pQBnFg8=bhZ`9bN4tWqp?Ob`{WEV4qQ~_-MZ4gqSo5LFvn5Oq@7pFc_@~VX zA2MI-b_v6{f$@2FQ42@yL@A$mi>3nMC+7Gb3Ox2K9vRle^OC&guAfn}EyYElYJ|^{ z5-)pxpt4r&a*Vm1gdv{P%Rq*sP3!#HP!+?iX$G7=2kE!-7M+s2y2Xb2d_4YCG?Pzu)?iut!ZhgV!gpM@_2Q1`Osrp zuBqv&yZf~_qkXX@`zLG-=m;%oh*3a=5**ODSpD=AjdJ=uzRt{|iAT`m6?%%YTjL>b z-Z4%#8L0F}npwWcD@o}hVdB}B81R2u+C$PiW+u}(?(oh~7!6ZGzp2wD@?mknh5HuO zJ*zxP11|Nl%eLDaO-`fR?=U|QgwX~mTtd`iV@fLS$qU1GZ7o?5RA}-9xTzqh8WX4<;h5FPSwkR=B}rWX9wS z4rMy%(hP3wygWYpvPt>=?9E+4%5!7KtnpqBqTk0YPDi~LEzGHIcr=n4R0K^O+eK!I zZ3vQ`D4*i~TN#*Jo_rp$=<7L5g>=_k#h=j(TGii7SC!w}VeVY83u#~4p%mCJR4R}y z(qg#A+1IO<9Ag#`i!;Etrt1A~YN?mzEeK&8T!A_B{m+9XE6HB32U zc}w77q&1y{pX^ZIUZ4xo&6HaFh2!916Z_9Q0dvaJ)p#E;y@?!)?u67#K>4(`o_3OI6+4E)+aq0Tc zDF#aF;=lnx`t|D`%G*uev9xrvGqaCc+-NC(eHnI*`=Ipt)phXpBY2COLv@ z@bgU>-sSa%@)o6kqO>H7S?U))&!?YwEnE#XDAP$B&`o|__aR@J`5MN@^i8`0`BA&7 znul!bn#_m?IvT<>{unnP+K^)md}PR9{oqP4e%;K-6;e3n?z|9kVUT?$k6?=0tVWD{c^g;+IOTE#zs;Oa7APU=W#hXzv8-9^kBpG26v}u}4CQy@r!v30X*9=2M9_W)~vE9nq%0 z$j5Cs6`{Omf2lf&AhrKfHk>1a7iNX7hMu7Z+sEzp6tI+EbiTZ9& zVnvtT@mtZX`@wch&((hi{n3|NS?~}s(+ub3Jo0UO zL*`eoZJ4_D%iM(|@awmuyKb?uxIHjb>WGIXRnA~(6UZ>jR`?`#T^Apg%39 z61*%yh%3h$=9}z-Z@s`*yKf}O_`phCn|`iVDdDE(eqv$aQoK0fhn#yY@dHBs$CPqg zqviw9y3NP;aUA=KB?T@DG(V}J5RJYB!}LA6NUE7NLh0rqf}J-#i!7Zch@03pCnOL+e>V0Yi$O z1d6-3H9=I^AhNme7fLBNl})C0<4u17Pc$7Q14tmHh5m1o^BNwkTgW1vOZ@GBSE9CQ zR}fs-iz&*Hu`z4!gAQw4xpXTE+)#diR7kEs77b1ME-`^00eUbadU+Bi^f4>M>6g9E ztLFeJ<#WSP5~e~N-wk|(>*#&XQQVxRXiqJ-)6H;+*;dQh4KW2x&ZlM_pQcOS_-9eo$(RN6~#l) z3$^q8rEC;$0#||l@-cmBadBIlI1xFi)xUSZC(>;CzhwRX`zl}*>Wc4qqAdz@WY$vS zmtKyb@_@}{_*hcVS<`8D^IzD<=>MeM4y_CsqM=6ywEELQfG1e}l>|>TcLeHLR34Ce zyD>xLOoJLxa_$_{!3k?Tx%QhZwfy(!YBQLBbT?Fg79)|-xTL3d+4^gg@%n*>n4_?8 znaA&?z=Wb7cv$FnIBHb0wAqqa&BllJuul(HtSukBevt1q0jLsPD4HH0!RN}4+M|$cT1@>Wl{NeIA;qB6*H2&ZAbtm#~@MIz@uQq5%UGV=Y<@#$>0RisQ zKpU^KYNfhpisRbq@~V{;=#?zfVqD-SD$>73{FCUV=415B*XpP8iNh3g_F^sSJNp)Q ztdf*fbc^jc1Qfh1d4!Od{PAUmOWwYF4TcW&%Sv&q7+g)E~}O6P10Brf*s`D3(9;JEdYczI3f<VhlhCphSI)1^8-P!juoUOw1dkv{=aPLec{TA=92h0d_Hf!0;ve?$`9X{KPsC{bDm zC>xR~t{!JHI63?5U2W&!$c)EHe&>3hdeM6IJGAWL+J^ep?GHoQF+HQ9POOFm$w@E_8c4=-Xcmxk7 z>;G@iC;IYP_NR(w4k2{OJVn;LeOsw%0CtY;lVthQpCnek5$s`Kmj^ZV3FAsWD%{Y}>ASD- zLOlZ~Od97+)oDo4+xE}Gf+f8JXspuYnfNq>*S+rDcJ*t&JDN|c$Vl8fn@uPOIf8o6fABv=v?=*F;~SP86m@7hVF=37R6@f0 zu)&N1*BO2-ER1kGlt%9A|lVzOVB!n{>3tw<%dT7S7zdh?58EbIu;k-+^J25P-XZqO*X@4yvq$_4g+D zA<+*ah^WF4j3Wvh1>rytF#3NHqz;W4!v8wEE9_J9Yx`am`W84wA}9!n=4~wDDvdbP zO+!vxAQb+BpK^{y-U@_~t~;E#arCzEd~4G|?$Tcj64zSjJygj1lQ0_;slhj6foCkg zuMi~|Irs@mlYd!K6mv+e36lOP_UM^i0$NA&mh@vQmos)BQEBPg1_-80n)z$rD!>0pVeRLGR z<_d79i6f3UNlHHFP2^b99;I^*7U}?JyK>@0#}V zK&9B%{?Vh`2>qGr<68ZwWWlJO&2CE1{J?pRSnd)*P3|Sr_b9T_e>aXmD0%3}yXyg$ zvR-J95pm0(D$Cw$H%v3z;E6{;J(m`rcs0y2KXNy$ef+>%M_|b``7iD%({B1+s|__S zJGby(eO(o?;hGkSichnrVYZ-#hcf4pSwLA2qwH;Q@%#<**u`W@5dxtbTT~T6s1J7G z%G)`PDlx6m{|QZ9*!mHK;Q_Fi-7fL+E3{uvOMUbOscKNwdSa;QCwH|4s4B@8nH z1R4CmpB74pUrqOnixS0DK4VEXh5NY(3K%-}#=i36d6%E@>M0{{XSgLM;FQ literal 0 HcmV?d00001 From ca655265f11792c68690df3584a6a587b8589156 Mon Sep 17 00:00:00 2001 From: Lorenzo Caggioni Date: Fri, 22 Apr 2022 00:31:28 +0200 Subject: [PATCH 03/12] Add python module --- tools/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/requirements.txt b/tools/requirements.txt index 3a6cb8166..8c7dd54a4 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,4 +1,5 @@ click +deepdiff marko requests yamale From 189ee7ae1add0854afbab4051923eceb44cbd341 Mon Sep 17 00:00:00 2001 From: Aleksandr Averbukh Date: Sat, 23 Apr 2022 08:45:04 +0200 Subject: [PATCH 04/12] Add shielded_instance_config support for compute instance template --- CHANGELOG.md | 1 + modules/compute-vm/main.tf | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ede4313fd..aa82c559b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. - add support for [Private Service Connect](https://cloud.google.com/vpc/docs/private-service-connect#psc-subnets) and [Proxy-only](https://cloud.google.com/load-balancing/docs/proxy-only-subnets) subnets to `net-vpc` module - bump Google provider versions to `>= 4.17.0` - bump Terraform version to `>= 1.1.0` +- add `shielded_instance_config` support for instance template on `compute-vm` module **FAST** diff --git a/modules/compute-vm/main.tf b/modules/compute-vm/main.tf index 50c1fea42..55581fee4 100644 --- a/modules/compute-vm/main.tf +++ b/modules/compute-vm/main.tf @@ -348,6 +348,16 @@ resource "google_compute_instance_template" "default" { scopes = local.service_account_scopes } + dynamic "shielded_instance_config" { + for_each = var.shielded_config != null ? [var.shielded_config] : [] + iterator = config + content { + enable_secure_boot = config.value.enable_secure_boot + enable_vtpm = config.value.enable_vtpm + enable_integrity_monitoring = config.value.enable_integrity_monitoring + } + } + lifecycle { create_before_destroy = true } From 74b507a9cbb17851e04b3ce144887b71c8e6cb77 Mon Sep 17 00:00:00 2001 From: David Gleich Date: Thu, 28 Apr 2022 11:48:48 +0200 Subject: [PATCH 05/12] Refactor network dashboard to use multiple files (#639) * Refactor cloud function into multiple files part 1 * Refactor cloud function into multiple files part 2 - networks.py * Refactor cloud function into multiple files part 3 - peerings * Refactor cloud function into multiple files part 4 - peerings * Refactor cloud function into multiple files part 5 - routes * Refactor cloud function into multiple files part 6 - move monitoring metrics client out of separate function * Refactor cloud function into multiple files part 6 - routers.py * Refactor cloud function into multiple files part 7 - the rest * Cleanup after refactoring --- .../network-dashboard/cloud-function/main.py | 1259 ++--------------- .../cloud-function/metrics/ilb_fwrules.py | 114 ++ .../cloud-function/metrics/instances.py | 95 ++ .../cloud-function/metrics/limits.py | 171 +++ .../cloud-function/metrics/metrics.py | 238 ++++ .../cloud-function/metrics/networks.py | 159 +++ .../cloud-function/metrics/peerings.py | 164 +++ .../cloud-function/metrics/routers.py | 56 + .../cloud-function/metrics/routes.py | 176 +++ 9 files changed, 1269 insertions(+), 1163 deletions(-) create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/ilb_fwrules.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/instances.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/limits.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/metrics.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/networks.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/peerings.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/routers.py create mode 100644 examples/cloud-operations/network-dashboard/cloud-function/metrics/routes.py diff --git a/examples/cloud-operations/network-dashboard/cloud-function/main.py b/examples/cloud-operations/network-dashboard/cloud-function/main.py index a3ec98348..ecb618ad1 100644 --- a/examples/cloud-operations/network-dashboard/cloud-function/main.py +++ b/examples/cloud-operations/network-dashboard/cloud-function/main.py @@ -15,32 +15,71 @@ # from code import interact +from distutils.command.config import config import os from pickletools import int4 import time -import http -import yaml -from collections import defaultdict -from google.api import metric_pb2 as ga_metric -from google.api_core import exceptions, protobuf_helpers from google.cloud import monitoring_v3, asset_v1 from google.protobuf import field_mask_pb2 -from googleapiclient import discovery, errors +from googleapiclient import discovery +from metrics import ilb_fwrules, instances, networks, metrics, limits, peerings, routes -# Organization ID containing the projects to be monitored -ORGANIZATION_ID = os.environ.get("ORGANIZATION_ID") -# list of projects from which function will get quotas information -MONITORED_PROJECTS_LIST = os.environ.get("MONITORED_PROJECTS_LIST").split(",") -# project where the metrics and dahsboards will be created -MONITORING_PROJECT_ID = os.environ.get("MONITORING_PROJECT_ID") -MONITORING_PROJECT_LINK = f"projects/{MONITORING_PROJECT_ID}" -service = discovery.build('compute', 'v1') -# Existing GCP metrics per network -GCE_INSTANCES_LIMIT_METRIC = "compute.googleapis.com/quota/instances_per_vpc_network/limit" -L4_FORWARDING_RULES_LIMIT_METRIC = "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit" -L7_FORWARDING_RULES_LIMIT_METRIC = "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit" -SUBNET_RANGES_LIMIT_METRIC = "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit" +def monitoring_interval(): + ''' + Creates the monitoring interval of 24 hours + + Returns: + monitoring_v3.TimeInterval: Moinitoring time interval of 24h + ''' + now = time.time() + seconds = int(now) + nanos = int((now - seconds) * 10**9) + return monitoring_v3.TimeInterval({ + "end_time": { + "seconds": seconds, + "nanos": nanos + }, + "start_time": { + "seconds": (seconds - 24 * 60 * 60), + "nanos": nanos + }, + }) + + +config = { + # Organization ID containing the projects to be monitored + "organization": + os.environ.get("ORGANIZATION_ID"), + # list of projects from which function will get quotas information + "monitored_projects": + os.environ.get("MONITORED_PROJECTS_LIST").split(","), + "monitoring_project_link": + os.environ.get('MONITORING_PROJECT_ID'), + "monitoring_project_link": + f"projects/{os.environ.get('MONITORING_PROJECT_ID')}", + "monitoring_interval": + monitoring_interval(), + "limit_names": { + "GCE_INSTANCES": + "compute.googleapis.com/quota/instances_per_vpc_network/limit", + "L4": + "compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit", + "L7": + "compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit", + "SUBNET_RANGES": + "compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit" + }, + "lb_scheme": { + "L7": "INTERNAL_MANAGED", + "L4": "INTERNAL" + }, + "clients": { + "discovery_client": discovery.build('compute', 'v1'), + "asset_client": asset_v1.AssetServiceClient(), + "monitoring_client": monitoring_v3.MetricServiceClient() + } +} def main(event, context): @@ -53,1167 +92,61 @@ def main(event, context): Returns: 'Function executed successfully' ''' - metrics_dict, limits_dict = create_metrics() + + # Keep the monitoring interval up2date during each run + config["monitoring_interval"] = monitoring_interval() + + metrics_dict, limits_dict = metrics.create_metrics( + config["monitoring_project_link"]) # Asset inventory queries - gce_instance_dict = get_gce_instance_dict() - l4_forwarding_rules_dict = get_l4_forwarding_rules_dict() - l7_forwarding_rules_dict = get_l7_forwarding_rules_dict() - subnet_range_dict = get_subnet_ranges_dict() + gce_instance_dict = instances.get_gce_instance_dict(config) + l4_forwarding_rules_dict = ilb_fwrules.get_forwarding_rules_dict(config, "L4") + l7_forwarding_rules_dict = ilb_fwrules.get_forwarding_rules_dict(config, "L7") + subnet_range_dict = networks.get_subnet_ranges_dict(config) # Per Network metrics - get_gce_instances_data(metrics_dict, gce_instance_dict, - limits_dict['number_of_instances_limit']) - get_l4_forwarding_rules_data( - metrics_dict, l4_forwarding_rules_dict, - limits_dict['internal_forwarding_rules_l4_limit']) - get_l7_forwarding_rules_data( - metrics_dict, l7_forwarding_rules_dict, - limits_dict['internal_forwarding_rules_l7_limit']) - get_vpc_peering_data(metrics_dict, - limits_dict['number_of_vpc_peerings_limit']) - dynamic_routes_dict = get_dynamic_routes( - metrics_dict, limits_dict['dynamic_routes_per_network_limit']) + instances.get_gce_instances_data(config, metrics_dict, gce_instance_dict, + limits_dict['number_of_instances_limit']) + ilb_fwrules.get_forwarding_rules_data( + config, metrics_dict, l4_forwarding_rules_dict, + limits_dict['internal_forwarding_rules_l4_limit'], "L4") + ilb_fwrules.get_forwarding_rules_data( + config, metrics_dict, l7_forwarding_rules_dict, + limits_dict['internal_forwarding_rules_l7_limit'], "L7") + peerings.get_vpc_peering_data(config, metrics_dict, + limits_dict['number_of_vpc_peerings_limit']) + dynamic_routes_dict = routes.get_dynamic_routes( + config, metrics_dict, limits_dict['dynamic_routes_per_network_limit']) # Per VPC peering group metrics - get_pgg_data( + metrics.get_pgg_data( + config, metrics_dict["metrics_per_peering_group"]["instance_per_peering_group"], - gce_instance_dict, GCE_INSTANCES_LIMIT_METRIC, + gce_instance_dict, config["limit_names"]["GCE_INSTANCES"], limits_dict['number_of_instances_ppg_limit']) - - get_pgg_data( - metrics_dict["metrics_per_peering_group"] + metrics.get_pgg_data( + config, metrics_dict["metrics_per_peering_group"] ["l4_forwarding_rules_per_peering_group"], l4_forwarding_rules_dict, - L4_FORWARDING_RULES_LIMIT_METRIC, + config["limit_names"]["L4"], limits_dict['internal_forwarding_rules_l4_ppg_limit']) - - get_pgg_data( - metrics_dict["metrics_per_peering_group"] + metrics.get_pgg_data( + config, metrics_dict["metrics_per_peering_group"] ["l7_forwarding_rules_per_peering_group"], l7_forwarding_rules_dict, - L7_FORWARDING_RULES_LIMIT_METRIC, + config["limit_names"]["L7"], limits_dict['internal_forwarding_rules_l7_ppg_limit']) - - get_pgg_data( - metrics_dict["metrics_per_peering_group"] + metrics.get_pgg_data( + config, metrics_dict["metrics_per_peering_group"] ["subnet_ranges_per_peering_group"], subnet_range_dict, - SUBNET_RANGES_LIMIT_METRIC, + config["limit_names"]["SUBNET_RANGES"], limits_dict['number_of_subnet_IP_ranges_ppg_limit']) - - get_dynamic_routes_ppg( - metrics_dict["metrics_per_peering_group"] + routes.get_dynamic_routes_ppg( + config, metrics_dict["metrics_per_peering_group"] ["dynamic_routes_per_peering_group"], dynamic_routes_dict, limits_dict['number_of_subnet_IP_ranges_ppg_limit']) return 'Function executed successfully' -def get_l4_forwarding_rules_dict(): - ''' - Calls the Asset Inventory API to get all L4 Forwarding Rules under the GCP organization. - - Parameters: - None - Returns: - forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. - ''' - client = asset_v1.AssetServiceClient() - - read_mask = field_mask_pb2.FieldMask() - read_mask.FromJsonString('name,versionedResources') - - forwarding_rules_dict = defaultdict(int) - - response = client.search_all_resources( - request={ - "scope": f"organizations/{ORGANIZATION_ID}", - "asset_types": ["compute.googleapis.com/ForwardingRule"], - "read_mask": read_mask, - }) - for resource in response: - internal = False - network_link = "" - for versioned in resource.versioned_resources: - for field_name, field_value in versioned.resource.items(): - if field_name == "loadBalancingScheme": - internal = (field_value == "INTERNAL") - if field_name == "network": - network_link = field_value - if internal: - if network_link in forwarding_rules_dict: - forwarding_rules_dict[network_link] += 1 - else: - forwarding_rules_dict[network_link] = 1 - - return forwarding_rules_dict - - -def get_l7_forwarding_rules_dict(): - ''' - Calls the Asset Inventory API to get all L7 Forwarding Rules under the GCP organization. - - Parameters: - None - Returns: - forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. - ''' - client = asset_v1.AssetServiceClient() - - read_mask = field_mask_pb2.FieldMask() - read_mask.FromJsonString('name,versionedResources') - - forwarding_rules_dict = defaultdict(int) - - response = client.search_all_resources( - request={ - "scope": f"organizations/{ORGANIZATION_ID}", - "asset_types": ["compute.googleapis.com/ForwardingRule"], - "read_mask": read_mask, - }) - for resource in response: - internal = False - network_link = "" - for versioned in resource.versioned_resources: - for field_name, field_value in versioned.resource.items(): - if field_name == "loadBalancingScheme": - internal = (field_value == "INTERNAL_MANAGED") - if field_name == "network": - network_link = field_value - if internal: - if network_link in forwarding_rules_dict: - forwarding_rules_dict[network_link] += 1 - else: - forwarding_rules_dict[network_link] = 1 - - return forwarding_rules_dict - - -def get_gce_instance_dict(): - ''' - Calls the Asset Inventory API to get all GCE instances under the GCP organization. - - Parameters: - None - Returns: - gce_instance_dict (dictionary of string: int): Keys are the network links and values are the number of GCE Instances per network. - ''' - client = asset_v1.AssetServiceClient() - - gce_instance_dict = defaultdict(int) - - response = client.search_all_resources( - request={ - "scope": f"organizations/{ORGANIZATION_ID}", - "asset_types": ["compute.googleapis.com/Instance"], - }) - for resource in response: - for field_name, field_value in resource.additional_attributes.items(): - if field_name == "networkInterfaceNetworks": - for network in field_value: - if network in gce_instance_dict: - gce_instance_dict[network] += 1 - else: - gce_instance_dict[network] = 1 - - return gce_instance_dict - - -def get_subnet_ranges_dict(): - ''' - Calls the Asset Inventory API to get all Subnet ranges under the GCP organization. - - Parameters: - None - Returns: - subnet_range_dict (dictionary of string: int): Keys are the network links and values are the number of subnet ranges per network. - ''' - client = asset_v1.AssetServiceClient() - subnet_range_dict = defaultdict(int) - read_mask = field_mask_pb2.FieldMask() - read_mask.FromJsonString('name,versionedResources') - - response = client.search_all_resources( - request={ - "scope": f"organizations/{ORGANIZATION_ID}", - "asset_types": ["compute.googleapis.com/Subnetwork"], - "read_mask": read_mask, - }) - for resource in response: - ranges = 0 - network_link = None - - for versioned in resource.versioned_resources: - for field_name, field_value in versioned.resource.items(): - if field_name == "network": - network_link = field_value - ranges += 1 - if field_name == "secondaryIpRanges": - for range in field_value: - ranges += 1 - - if network_link in subnet_range_dict: - subnet_range_dict[network_link] += ranges - else: - subnet_range_dict[network_link] = ranges - - return subnet_range_dict - - -def create_client(): - ''' - Creates the monitoring API client, that will be used to create, read and update custom metrics. - - Parameters: - None - Returns: - client (monitoring_v3.MetricServiceClient): Monitoring API client - interval (monitoring_v3.TimeInterval): Interval for the metric data points (24 hours) - ''' - try: - client = monitoring_v3.MetricServiceClient() - now = time.time() - seconds = int(now) - nanos = int((now - seconds) * 10**9) - interval = monitoring_v3.TimeInterval({ - "end_time": { - "seconds": seconds, - "nanos": nanos - }, - "start_time": { - "seconds": (seconds - 86400), - "nanos": nanos - }, - }) - return (client, interval) - except Exception as e: - raise Exception("Error occurred creating the client: {}".format(e)) - - -def create_metrics(): - ''' - Creates all Cloud Monitoring custom metrics based on the metric.yaml file - - Parameters: - None - - Returns: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions - limits_dict (dictionary of dictionary of string: int): limits_dict[metric_name]: dict[network_name] = limit_value - ''' - client = monitoring_v3.MetricServiceClient() - existing_metrics = [] - for desc in client.list_metric_descriptors(name=MONITORING_PROJECT_LINK): - existing_metrics.append(desc.type) - limits_dict = {} - - with open("metrics.yaml", 'r') as stream: - try: - metrics_dict = yaml.safe_load(stream) - - for metric_list in metrics_dict.values(): - for metric in metric_list.values(): - for sub_metric_key, sub_metric in metric.items(): - metric_link = f"custom.googleapis.com/{sub_metric['name']}" - # If the metric doesn't exist yet, then we create it - if metric_link not in existing_metrics: - create_metric(sub_metric["name"], sub_metric["description"]) - # Parse limits (both default values and network specific ones) - if sub_metric_key == "limit": - limits_dict_for_metric = {} - for network_link, limit_value in sub_metric["values"].items(): - limits_dict_for_metric[network_link] = limit_value - limits_dict[sub_metric["name"]] = limits_dict_for_metric - - return metrics_dict, limits_dict - except yaml.YAMLError as exc: - print(exc) - - -def create_metric(metric_name, description): - ''' - Creates a Cloud Monitoring metric based on the parameter given if the metric is not already existing - - Parameters: - metric_name (string): Name of the metric to be created - description (string): Description of the metric to be created - - Returns: - None - ''' - client = monitoring_v3.MetricServiceClient() - - descriptor = ga_metric.MetricDescriptor() - descriptor.type = f"custom.googleapis.com/{metric_name}" - descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE - descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE - descriptor.description = description - descriptor = client.create_metric_descriptor(name=MONITORING_PROJECT_LINK, - metric_descriptor=descriptor) - print("Created {}.".format(descriptor.name)) - - -def get_gce_instances_data(metrics_dict, gce_instance_dict, limit_dict): - ''' - Gets the data for GCE instances per VPC Network and writes it to the metric defined in instance_metric. - - Parameters: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions - gce_instance_dict (dictionary of string: int): Keys are the network links and values are the number of GCE Instances per network. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - gce_instance_dict - ''' - # Existing GCP Monitoring metrics for GCE instances - metric_instances_limit = "compute.googleapis.com/quota/instances_per_vpc_network/limit" - - for project in MONITORED_PROJECTS_LIST: - network_dict = get_networks(project) - - current_quota_limit = get_quota_current_limit(f"projects/{project}", - metric_instances_limit) - if current_quota_limit is None: - print( - f"Could not write number of instances for projects/{project} due to missing quotas" - ) - - current_quota_limit_view = customize_quota_view(current_quota_limit) - - for net in network_dict: - set_limits(net, current_quota_limit_view, limit_dict) - - usage = 0 - if net['self_link'] in gce_instance_dict: - usage = gce_instance_dict[net['self_link']] - - write_data_to_metric( - project, usage, metrics_dict["metrics_per_network"] - ["instance_per_network"]["usage"]["name"], net['network_name']) - write_data_to_metric( - project, net['limit'], metrics_dict["metrics_per_network"] - ["instance_per_network"]["limit"]["name"], net['network_name']) - write_data_to_metric( - project, usage / net['limit'], metrics_dict["metrics_per_network"] - ["instance_per_network"]["utilization"]["name"], net['network_name']) - - print(f"Wrote number of instances to metric for projects/{project}") - - -def get_vpc_peering_data(metrics_dict, limit_dict): - ''' - Gets the data for VPC peerings (active or not) and writes it to the metric defined (vpc_peering_active_metric and vpc_peering_metric). - - Parameters: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - None - ''' - for project in MONITORED_PROJECTS_LIST: - active_vpc_peerings, vpc_peerings = gather_vpc_peerings_data( - project, limit_dict) - for peering in active_vpc_peerings: - write_data_to_metric( - project, peering['active_peerings'], - metrics_dict["metrics_per_network"]["vpc_peering_active_per_network"] - ["usage"]["name"], peering['network_name']) - write_data_to_metric( - project, peering['network_limit'], metrics_dict["metrics_per_network"] - ["vpc_peering_active_per_network"]["limit"]["name"], - peering['network_name']) - write_data_to_metric( - project, peering['active_peerings'] / peering['network_limit'], - metrics_dict["metrics_per_network"]["vpc_peering_active_per_network"] - ["utilization"]["name"], peering['network_name']) - print("Wrote number of active VPC peerings to custom metric for project:", - project) - - for peering in vpc_peerings: - write_data_to_metric( - project, peering['peerings'], metrics_dict["metrics_per_network"] - ["vpc_peering_per_network"]["usage"]["name"], peering['network_name']) - write_data_to_metric( - project, peering['network_limit'], metrics_dict["metrics_per_network"] - ["vpc_peering_per_network"]["limit"]["name"], peering['network_name']) - write_data_to_metric( - project, peering['peerings'] / peering['network_limit'], - metrics_dict["metrics_per_network"]["vpc_peering_per_network"] - ["utilization"]["name"], peering['network_name']) - print("Wrote number of VPC peerings to custom metric for project:", project) - - -def gather_vpc_peerings_data(project_id, limit_dict): - ''' - Gets the data for all VPC peerings (active or not) in project_id and writes it to the metric defined in vpc_peering_active_metric and vpc_peering_metric. - - Parameters: - project_id (string): We will take all VPCs in that project_id and look for all peerings to these VPCs. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - active_peerings_dict (dictionary of string: string): Contains project_id, network_name, network_limit for each active VPC peering. - peerings_dict (dictionary of string: string): Contains project_id, network_name, network_limit for each VPC peering. - ''' - active_peerings_dict = [] - peerings_dict = [] - request = service.networks().list(project=project_id) - response = request.execute() - if 'items' in response: - for network in response['items']: - if 'peerings' in network: - STATE = network['peerings'][0]['state'] - if STATE == "ACTIVE": - active_peerings_count = len(network['peerings']) - else: - active_peerings_count = 0 - - peerings_count = len(network['peerings']) - else: - peerings_count = 0 - active_peerings_count = 0 - - network_link = f"https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network['name']}" - network_limit = get_limit_ppg(network_link, limit_dict) - - active_d = { - 'project_id': project_id, - 'network_name': network['name'], - 'active_peerings': active_peerings_count, - 'network_limit': network_limit - } - active_peerings_dict.append(active_d) - d = { - 'project_id': project_id, - 'network_name': network['name'], - 'peerings': peerings_count, - 'network_limit': network_limit - } - peerings_dict.append(d) - - return active_peerings_dict, peerings_dict - - -def get_limit_ppg(network_link, limit_dict): - ''' - Checks if this network has a specific limit for a metric, if so, returns that limit, if not, returns the default limit. - - Parameters: - network_link (string): VPC network link. - limit_list (list of string): Used to get the limit per VPC or the default limit. - Returns: - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - ''' - if network_link in limit_dict: - return limit_dict[network_link] - else: - if 'default_value' in limit_dict: - return limit_dict['default_value'] - else: - print(f"Error: limit not found for {network_link}") - return 0 - - -def get_l4_forwarding_rules_data(metrics_dict, forwarding_rules_dict, - limit_dict): - ''' - Gets the data for L4 Internal Forwarding Rules per VPC Network and writes it to the metric defined in forwarding_rules_metric. - - Parameters: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions. - forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value. - Returns: - None - ''' - for project in MONITORED_PROJECTS_LIST: - network_dict = get_networks(project) - - current_quota_limit = get_quota_current_limit( - f"projects/{project}", L4_FORWARDING_RULES_LIMIT_METRIC) - - if current_quota_limit is None: - print( - f"Could not write L4 forwarding rules to metric for projects/{project} due to missing quotas" - ) - continue - - current_quota_limit_view = customize_quota_view(current_quota_limit) - - for net in network_dict: - set_limits(net, current_quota_limit_view, limit_dict) - - usage = 0 - if net['self_link'] in forwarding_rules_dict: - usage = forwarding_rules_dict[net['self_link']] - - write_data_to_metric( - project, usage, metrics_dict["metrics_per_network"] - ["l4_forwarding_rules_per_network"]["usage"]["name"], - net['network_name']) - write_data_to_metric( - project, net['limit'], metrics_dict["metrics_per_network"] - ["l4_forwarding_rules_per_network"]["limit"]["name"], - net['network_name']) - write_data_to_metric( - project, usage / net['limit'], metrics_dict["metrics_per_network"] - ["l4_forwarding_rules_per_network"]["utilization"]["name"], - net['network_name']) - - print( - f"Wrote number of L4 forwarding rules to metric for projects/{project}") - - -def get_l7_forwarding_rules_data(metrics_dict, forwarding_rules_dict, - limit_dict): - ''' - Gets the data for L7 Internal Forwarding Rules per VPC Network and writes it to the metric defined in forwarding_rules_metric. - - Parameters: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions. - forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value. - Returns: - None - ''' - for project in MONITORED_PROJECTS_LIST: - network_dict = get_networks(project) - - current_quota_limit = get_quota_current_limit( - f"projects/{project}", L7_FORWARDING_RULES_LIMIT_METRIC) - if current_quota_limit is None: - print( - f"Could not write number of L7 forwarding rules to metric for projects/{project} due to missing quotas" - ) - continue - - current_quota_limit_view = customize_quota_view(current_quota_limit) - - for net in network_dict: - set_limits(net, current_quota_limit_view, limit_dict) - - usage = 0 - if net['self_link'] in forwarding_rules_dict: - usage = forwarding_rules_dict[net['self_link']] - - write_data_to_metric( - project, usage, metrics_dict["metrics_per_network"] - ["l7_forwarding_rules_per_network"]["usage"]["name"], - net['network_name']) - write_data_to_metric( - project, net['limit'], metrics_dict["metrics_per_network"] - ["l7_forwarding_rules_per_network"]["limit"]["name"], - net['network_name']) - write_data_to_metric( - project, usage / net['limit'], metrics_dict["metrics_per_network"] - ["l7_forwarding_rules_per_network"]["utilization"]["name"], - net['network_name']) - - print( - f"Wrote number of L7 forwarding rules to metric for projects/{project}") - - -def get_pgg_data(metric_dict, usage_dict, limit_metric, limit_dict): - ''' - This function gets the usage, limit and utilization per VPC peering group for a specific metric for all projects to be monitored. - - Parameters: - metric_dict (dictionary of string: string): Dictionary with the metric names and description, that will be used to populate the metrics - usage_dict (dictionnary of string:int): Dictionary with the network link as key and the number of resources as value - limit_metric (string): Name of the existing GCP metric for limit per VPC network - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - None - ''' - for project in MONITORED_PROJECTS_LIST: - network_dict_list = gather_peering_data(project) - # Network dict list is a list of dictionary (one for each network) - # For each network, this dictionary contains: - # project_id, network_name, network_id, usage, limit, peerings (list of peered networks) - # peerings is a list of dictionary (one for each peered network) and contains: - # project_id, network_name, network_id - current_quota_limit = get_quota_current_limit(f"projects/{project}", - limit_metric) - if current_quota_limit is None: - print( - f"Could not write number of L7 forwarding rules to metric for projects/{project} due to missing quotas" - ) - continue - - current_quota_limit_view = customize_quota_view(current_quota_limit) - - # For each network in this GCP project - for network_dict in network_dict_list: - if network_dict['network_id'] == 0: - print( - f"Could not write {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project} due to missing permissions." - ) - continue - network_link = f"https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network_dict['network_name']}" - - limit = get_limit_network(network_dict, network_link, - current_quota_limit_view, limit_dict) - - usage = 0 - if network_link in usage_dict: - usage = usage_dict[network_link] - - # Here we add usage and limit to the network dictionary - network_dict["usage"] = usage - network_dict["limit"] = limit - - # For every peered network, get usage and limits - for peered_network_dict in network_dict['peerings']: - peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network_dict['project_id']}/global/networks/{peered_network_dict['network_name']}" - peered_usage = 0 - if peered_network_link in usage_dict: - peered_usage = usage_dict[peered_network_link] - - current_peered_quota_limit = get_quota_current_limit( - f"projects/{peered_network_dict['project_id']}", limit_metric) - if current_peered_quota_limit is None: - print( - f"Could not write metrics for peering to projects/{peered_network_dict['project_id']} due to missing quotas" - ) - continue - - peering_project_limit = customize_quota_view(current_peered_quota_limit) - - peered_limit = get_limit_network(peered_network_dict, - peered_network_link, - peering_project_limit, limit_dict) - # Here we add usage and limit to the peered network dictionary - peered_network_dict["usage"] = peered_usage - peered_network_dict["limit"] = peered_limit - - count_effective_limit(project, network_dict, metric_dict["usage"]["name"], - metric_dict["limit"]["name"], - metric_dict["utilization"]["name"], limit_dict) - print( - f"Wrote {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project}" - ) - - -def get_dynamic_routes_ppg(metric_dict, usage_dict, limit_dict): - ''' - This function gets the usage, limit and utilization for the dynamic routes per VPC peering group. - - Parameters: - metric_dict (dictionary of string: string): Dictionary with the metric names and description, that will be used to populate the metrics - usage_dict (dictionnary of string:int): Dictionary with the network link as key and the number of resources as value - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - None - ''' - for project in MONITORED_PROJECTS_LIST: - network_dict_list = gather_peering_data(project) - - for network_dict in network_dict_list: - network_link = f"https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network_dict['network_name']}" - - limit = get_limit_ppg(network_link, limit_dict) - - usage = 0 - if network_link in usage_dict: - usage = usage_dict[network_link] - - # Here we add usage and limit to the network dictionary - network_dict["usage"] = usage - network_dict["limit"] = limit - - # For every peered network, get usage and limits - for peered_network_dict in network_dict['peerings']: - peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network_dict['project_id']}/global/networks/{peered_network_dict['network_name']}" - peered_usage = 0 - if peered_network_link in usage_dict: - peered_usage = usage_dict[peered_network_link] - - peered_limit = get_limit_ppg(peered_network_link, limit_dict) - - # Here we add usage and limit to the peered network dictionary - peered_network_dict["usage"] = peered_usage - peered_network_dict["limit"] = peered_limit - - count_effective_limit(project, network_dict, metric_dict["usage"]["name"], - metric_dict["limit"]["name"], - metric_dict["utilization"]["name"], limit_dict) - print( - f"Wrote {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project}" - ) - - -def count_effective_limit(project_id, network_dict, usage_metric_name, - limit_metric_name, utilization_metric_name, - limit_dict): - ''' - Calculates the effective limits (using algorithm in the link below) for peering groups and writes data (usage, limit, utilization) to the custom metrics. - Source: https://cloud.google.com/vpc/docs/quota#vpc-peering-effective-limit - - Parameters: - project_id (string): Project ID for the project to be analyzed. - network_dict (dictionary of string: string): Contains all required information about the network to get the usage, limit and utilization. - usage_metric_name (string): Name of the custom metric to be populated for usage per VPC peering group. - limit_metric_name (string): Name of the custom metric to be populated for limit per VPC peering group. - utilization_metric_name (string): Name of the custom metric to be populated for utilization per VPC peering group. - limit_dict (dictionary of string:int): Dictionary containing the limit per peering group (either VPC specific or default limit). - Returns: - None - ''' - - if network_dict['peerings'] == []: - return - - # Get usage: Sums usage for current network + all peered networks - peering_group_usage = network_dict['usage'] - for peered_network in network_dict['peerings']: - if 'usage' not in peered_network: - print( - f"Can not add metrics for peered network in projects/{project_id} as no usage metrics exist due to missing permissions" - ) - continue - peering_group_usage += peered_network['usage'] - - network_link = f"https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network_dict['network_name']}" - - # Calculates effective limit: Step 1: max(per network limit, per network_peering_group limit) - limit_step1 = max(network_dict['limit'], - get_limit_ppg(network_link, limit_dict)) - - # Calculates effective limit: Step 2: List of max(per network limit, per network_peering_group limit) for each peered network - limit_step2 = [] - for peered_network in network_dict['peerings']: - peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network['project_id']}/global/networks/{peered_network['network_name']}" - - if 'limit' in peered_network: - limit_step2.append( - max(peered_network['limit'], - get_limit_ppg(peered_network_link, limit_dict))) - else: - print( - f"Ignoring projects/{peered_network['project_id']} for limits in peering group of project {project_id} as no limits are available." - + - "This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" - ) - - # Calculates effective limit: Step 3: Find minimum from the list created by Step 2 - limit_step3 = 0 - if len(limit_step2) > 0: - limit_step3 = min(limit_step2) - - # Calculates effective limit: Step 4: Find maximum from step 1 and step 3 - effective_limit = max(limit_step1, limit_step3) - utilization = peering_group_usage / effective_limit - - write_data_to_metric(project_id, peering_group_usage, usage_metric_name, - network_dict['network_name']) - write_data_to_metric(project_id, effective_limit, limit_metric_name, - network_dict['network_name']) - write_data_to_metric(project_id, utilization, utilization_metric_name, - network_dict['network_name']) - - -def get_networks(project_id): - ''' - Returns a dictionary of all networks in a project. - - Parameters: - project_id (string): Project ID for the project containing the networks. - Returns: - network_dict (dictionary of string: string): Contains the project_id, network_name(s) and network_id(s) - ''' - request = service.networks().list(project=project_id) - response = request.execute() - network_dict = [] - if 'items' in response: - for network in response['items']: - network_name = network['name'] - network_id = network['id'] - self_link = network['selfLink'] - d = { - 'project_id': project_id, - 'network_name': network_name, - 'network_id': network_id, - 'self_link': self_link - } - network_dict.append(d) - return network_dict - - -def get_dynamic_routes(metrics_dict, limits_dict): - ''' - Writes all dynamic routes per VPC to custom metrics. - - Parameters: - metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions. - limits_dict (dictionary of string: int): key is network link (or 'default_value') and value is the limit for that network - Returns: - dynamic_routes_dict (dictionary of string: int): key is network link and value is the number of dynamic routes for that network - ''' - routers_dict = get_routers() - dynamic_routes_dict = defaultdict(int) - - for project_id in MONITORED_PROJECTS_LIST: - network_dict = get_networks(project_id) - - for network in network_dict: - sum_routes = get_routes_for_network(network['self_link'], project_id, - routers_dict) - dynamic_routes_dict[network['self_link']] = sum_routes - - if network['self_link'] in limits_dict: - limit = limits_dict[network['self_link']] - else: - if 'default_value' in limits_dict: - limit = limits_dict['default_value'] - else: - print("Error: couldn't find limit for dynamic routes.") - break - - utilization = sum_routes / limit - - write_data_to_metric( - project_id, sum_routes, metrics_dict["metrics_per_network"] - ["dynamic_routes_per_network"]["usage"]["name"], - network['network_name']) - write_data_to_metric( - project_id, limit, metrics_dict["metrics_per_network"] - ["dynamic_routes_per_network"]["limit"]["name"], - network['network_name']) - write_data_to_metric( - project_id, utilization, metrics_dict["metrics_per_network"] - ["dynamic_routes_per_network"]["utilization"]["name"], - network['network_name']) - - print("Wrote metrics for dynamic routes for VPCs in project", project_id) - - return dynamic_routes_dict - - -def get_routes_for_network(network_link, project_id, routers_dict): - ''' - Returns a the number of dynamic routes for a given network - - Parameters: - network_link (string): Network self link. - project_id (string): Project ID containing the network. - routers_dict (dictionary of string: list of string): Dictionary with key as network link and value as list of router links. - Returns: - sum_routes (int): Number of routes in that network. - ''' - sum_routes = 0 - - if network_link in routers_dict: - for router_link in routers_dict[network_link]: - # Router link is using the following format: - # 'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME' - start = router_link.find("/regions/") + len("/regions/") - end = router_link.find("/routers/") - router_region = router_link[start:end] - router_name = router_link.split('/routers/')[1] - routes = get_routes_for_router(project_id, router_region, router_name) - - sum_routes += routes - - return sum_routes - - -def get_routes_for_router(project_id, router_region, router_name): - ''' - Returns the same of dynamic routes learned by a specific Cloud Router instance - - Parameters: - project_id (string): Project ID for the project containing the Cloud Router. - router_region (string): GCP region for the Cloud Router. - router_name (string): Cloud Router name. - Returns: - sum_routes (int): Number of dynamic routes learned by the Cloud Router. - ''' - request = service.routers().getRouterStatus(project=project_id, - region=router_region, - router=router_name) - response = request.execute() - - sum_routes = 0 - - if 'result' in response: - if 'bgpPeerStatus' in response['result']: - for peer in response['result']['bgpPeerStatus']: - sum_routes += peer['numLearnedRoutes'] - - return sum_routes - - -def get_routers(): - ''' - Returns a dictionary of all Cloud Routers in the GCP organization. - - Parameters: - None - Returns: - routers_dict (dictionary of string: list of string): Key is the network link and value is a list of router links. - ''' - client = asset_v1.AssetServiceClient() - - read_mask = field_mask_pb2.FieldMask() - read_mask.FromJsonString('name,versionedResources') - - routers_dict = {} - - response = client.search_all_resources( - request={ - "scope": f"organizations/{ORGANIZATION_ID}", - "asset_types": ["compute.googleapis.com/Router"], - "read_mask": read_mask, - }) - for resource in response: - network_link = None - router_link = None - for versioned in resource.versioned_resources: - for field_name, field_value in versioned.resource.items(): - if field_name == "network": - network_link = field_value - if field_name == "selfLink": - router_link = field_value - - if network_link in routers_dict: - routers_dict[network_link].append(router_link) - else: - routers_dict[network_link] = [router_link] - - return routers_dict - - -def gather_peering_data(project_id): - ''' - Returns a dictionary of all peerings for all networks in a project. - - Parameters: - project_id (string): Project ID for the project containing the networks. - Returns: - network_list (dictionary of string: string): Contains the project_id, network_name(s) and network_id(s) of peered networks. - ''' - request = service.networks().list(project=project_id) - response = request.execute() - - network_list = [] - if 'items' in response: - for network in response['items']: - net = { - 'project_id': project_id, - 'network_name': network['name'], - 'network_id': network['id'], - 'peerings': [] - } - if 'peerings' in network: - STATE = network['peerings'][0]['state'] - if STATE == "ACTIVE": - for peered_network in network[ - 'peerings']: # "projects/{project_name}/global/networks/{network_name}" - start = peered_network['network'].find("projects/") + len( - 'projects/') - end = peered_network['network'].find("/global") - peered_project = peered_network['network'][start:end] - peered_network_name = peered_network['network'].split( - "networks/")[1] - peered_net = { - 'project_id': - peered_project, - 'network_name': - peered_network_name, - 'network_id': - get_network_id(peered_project, peered_network_name) - } - net["peerings"].append(peered_net) - network_list.append(net) - return network_list - - -def get_network_id(project_id, network_name): - ''' - Returns the network_id for a specific project / network name. - - Parameters: - project_id (string): Project ID for the project containing the networks. - network_name (string): Name of the network - Returns: - network_id (int): Network ID. - ''' - request = service.networks().list(project=project_id) - try: - response = request.execute() - except errors.HttpError as err: - # TODO: log proper warning - if err.resp.status == http.HTTPStatus.FORBIDDEN: - print( - f"Warning: error reading networks for {project_id}. " + - f"This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" - ) - else: - print(f"Warning: error reading networks for {project_id}: {err}") - return 0 - - network_id = 0 - - if 'items' in response: - for network in response['items']: - if network['name'] == network_name: - network_id = network['id'] - break - - if network_id == 0: - print(f"Error: network_id not found for {network_name} in {project_id}") - - return network_id - - -def get_quota_current_limit(project_link, metric_name): - ''' - Retrieves limit for a specific metric. - - Parameters: - project_link (string): Project link. - metric_name (string): Name of the metric. - Returns: - results_list (list of string): Current limit. - ''' - client, interval = create_client() - - try: - results = client.list_time_series( - request={ - "name": project_link, - "filter": f'metric.type = "{metric_name}"', - "interval": interval, - "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL - }) - results_list = list(results) - return results_list - except exceptions.PermissionDenied as err: - print( - f"Warning: error reading quotas for {project_link}. " + - f"This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" - ) - return None - - -def customize_quota_view(quota_results): - ''' - Customize the quota output for an easier parsable output. - - Parameters: - quota_results (string): Input from get_quota_current_usage or get_quota_current_limit. Contains the Current usage or limit for all networks in that project. - Returns: - quotaViewList (list of dictionaries of string: string): Current quota usage or limit. - ''' - quotaViewList = [] - for result in quota_results: - quotaViewJson = {} - quotaViewJson.update(dict(result.resource.labels)) - quotaViewJson.update(dict(result.metric.labels)) - for val in result.points: - quotaViewJson.update({'value': val.value.int64_value}) - quotaViewList.append(quotaViewJson) - return quotaViewList - - -def set_limits(network_dict, quota_limit, limit_dict): - ''' - Updates the network dictionary with quota limit values. - - Parameters: - network_dict (dictionary of string: string): Contains network information. - quota_limit (list of dictionaries of string: string): Current quota limit. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - None - ''' - - network_dict['limit'] = None - - if quota_limit: - for net in quota_limit: - if net['network_id'] == network_dict['network_id']: - network_dict['limit'] = net['value'] - return - - network_link = f"https://www.googleapis.com/compute/v1/projects/{network_dict['project_id']}/global/networks/{network_dict['network_name']}" - - if network_link in limit_dict: - network_dict['limit'] = limit_dict[network_link] - else: - if 'default_value' in limit_dict: - network_dict['limit'] = limit_dict['default_value'] - else: - print(f"Error: Couldn't find limit for {network_link}") - network_dict['limit'] = 0 - - -def get_limit_network(network_dict, network_link, quota_limit, limit_dict): - ''' - Returns limit for a specific network and metric, using the GCP quota metrics or the values in the yaml file if not found. - - Parameters: - network_dict (dictionary of string: string): Contains network information. - network_link (string): Contains network link - quota_limit (list of dictionaries of string: string): Current quota limit for all networks in that project. - limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value - Returns: - limit (int): Current limit for that network. - ''' - if quota_limit: - for net in quota_limit: - if net['network_id'] == network_dict['network_id']: - return net['value'] - - if network_link in limit_dict: - return limit_dict[network_link] - else: - if 'default_value' in limit_dict: - return limit_dict['default_value'] - else: - print(f"Error: Couldn't find limit for {network_link}") - - return 0 - - -def write_data_to_metric(monitored_project_id, value, metric_name, - network_name): - ''' - Writes data to Cloud Monitoring custom metrics. - - Parameters: - monitored_project_id: ID of the project where the resource lives (will be added as a label) - value (int): Value for the data point of the metric. - metric_name (string): Name of the metric - network_name (string): Name of the network (will be added as a label) - Returns: - usage (int): Current usage for that network. - limit (int): Current usage for that network. - ''' - client = monitoring_v3.MetricServiceClient() - - series = monitoring_v3.TimeSeries() - series.metric.type = f"custom.googleapis.com/{metric_name}" - series.resource.type = "global" - series.metric.labels["network_name"] = network_name - series.metric.labels["project"] = monitored_project_id - - now = time.time() - seconds = int(now) - nanos = int((now - seconds) * 10**9) - interval = monitoring_v3.TimeInterval( - {"end_time": { - "seconds": seconds, - "nanos": nanos - }}) - point = monitoring_v3.Point({ - "interval": interval, - "value": { - "double_value": value - } - }) - series.points = [point] - - # TODO: sometimes this cashes with 'DeadlineExceeded: 504 Deadline expired before operation could complete' error - # Implement exponential backoff retries? - try: - client.create_time_series(name=MONITORING_PROJECT_LINK, - time_series=[series]) - except Exception as e: - print(e) +if __name__ == "__main__": + main(None, None) diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/ilb_fwrules.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/ilb_fwrules.py new file mode 100644 index 000000000..55490544f --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/ilb_fwrules.py @@ -0,0 +1,114 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from collections import defaultdict +from google.protobuf import field_mask_pb2 +from . import metrics, networks, limits + + +def get_forwarding_rules_dict(config, layer: str): + ''' + Calls the Asset Inventory API to get all L4 Forwarding Rules under the GCP organization. + + Parameters: + config (dict): The dict containing config like clients and limits + layer (string): the Layer to get Forwarding rules (L4/L7) + Returns: + forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. + ''' + + read_mask = field_mask_pb2.FieldMask() + read_mask.FromJsonString('name,versionedResources') + + forwarding_rules_dict = defaultdict(int) + + # TODO: Paging? + response = config["clients"]["asset_client"].search_all_resources( + request={ + "scope": f"organizations/{config['organization']}", + "asset_types": ["compute.googleapis.com/ForwardingRule"], + "read_mask": read_mask, + }) + + for resource in response: + internal = False + network_link = "" + for versioned in resource.versioned_resources: + for field_name, field_value in versioned.resource.items(): + if field_name == "loadBalancingScheme": + internal = (field_value == config["lb_scheme"][layer]) + if field_name == "network": + network_link = field_value + if internal: + if network_link in forwarding_rules_dict: + forwarding_rules_dict[network_link] += 1 + else: + forwarding_rules_dict[network_link] = 1 + + return forwarding_rules_dict + + +def get_forwarding_rules_data(config, metrics_dict, forwarding_rules_dict, + limit_dict, layer): + ''' + Gets the data for L4 Internal Forwarding Rules per VPC Network and writes it to the metric defined in forwarding_rules_metric. + + Parameters: + config (dict): The dict containing config like clients and limits + metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions. + forwarding_rules_dict (dictionary of string: int): Keys are the network links and values are the number of Forwarding Rules per network. + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value. + layer (string): the Layer to get Forwarding rules (L4/L7) + Returns: + None + ''' + for project in config["monitored_projects"]: + network_dict = networks.get_networks(config, project) + + current_quota_limit = limits.get_quota_current_limit( + config, f"projects/{project}", config["limit_names"][layer]) + + if current_quota_limit is None: + print( + f"Could not write {layer} forwarding rules to metric for projects/{project} due to missing quotas" + ) + continue + + current_quota_limit_view = metrics.customize_quota_view(current_quota_limit) + + for net in network_dict: + limits.set_limits(net, current_quota_limit_view, limit_dict) + + usage = 0 + if net['self_link'] in forwarding_rules_dict: + usage = forwarding_rules_dict[net['self_link']] + metrics.write_data_to_metric( + config, project, usage, metrics_dict["metrics_per_network"] + [f"{layer.lower()}_forwarding_rules_per_network"]["usage"]["name"], + net['network_name']) + metrics.write_data_to_metric( + config, project, net['limit'], metrics_dict["metrics_per_network"] + [f"{layer.lower()}_forwarding_rules_per_network"]["limit"]["name"], + net['network_name']) + metrics.write_data_to_metric( + config, project, usage / net['limit'], + metrics_dict["metrics_per_network"] + [f"{layer.lower()}_forwarding_rules_per_network"]["utilization"] + ["name"], net['network_name']) + + print( + f"Wrote number of {layer} forwarding rules to metric for projects/{project}" + ) diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/instances.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/instances.py new file mode 100644 index 000000000..ef78e67d0 --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/instances.py @@ -0,0 +1,95 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from code import interact +from collections import defaultdict +from . import metrics, networks, limits + + +def get_gce_instance_dict(config: dict): + ''' + Calls the Asset Inventory API to get all GCE instances under the GCP organization. + + Parameters: + config (dict): The dict containing config like clients and limits + + Returns: + gce_instance_dict (dictionary of string: int): Keys are the network links and values are the number of GCE Instances per network. + ''' + + gce_instance_dict = defaultdict(int) + + response = config["clients"]["asset_client"].search_all_resources( + request={ + "scope": f"organizations/{config['organization']}", + "asset_types": ["compute.googleapis.com/Instance"], + }) + for resource in response: + for field_name, field_value in resource.additional_attributes.items(): + if field_name == "networkInterfaceNetworks": + for network in field_value: + if network in gce_instance_dict: + gce_instance_dict[network] += 1 + else: + gce_instance_dict[network] = 1 + + return gce_instance_dict + + +def get_gce_instances_data(config, metrics_dict, gce_instance_dict, limit_dict): + ''' + Gets the data for GCE instances per VPC Network and writes it to the metric defined in instance_metric. + + Parameters: + config (dict): The dict containing config like clients and limits + metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions + gce_instance_dict (dictionary of string: int): Keys are the network links and values are the number of GCE Instances per network. + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + gce_instance_dict + ''' + + for project in config["monitored_projects"]: + network_dict = networks.get_networks(config, project) + + current_quota_limit = limits.get_quota_current_limit( + config, f"projects/{project}", config["limit_names"]["GCE_INSTANCES"]) + if current_quota_limit is None: + print( + f"Could not write number of instances for projects/{project} due to missing quotas" + ) + + current_quota_limit_view = metrics.customize_quota_view(current_quota_limit) + + for net in network_dict: + limits.set_limits(net, current_quota_limit_view, limit_dict) + + usage = 0 + if net['self_link'] in gce_instance_dict: + usage = gce_instance_dict[net['self_link']] + + metrics.write_data_to_metric( + config, project, usage, metrics_dict["metrics_per_network"] + ["instance_per_network"]["usage"]["name"], net['network_name']) + metrics.write_data_to_metric( + config, project, net['limit'], metrics_dict["metrics_per_network"] + ["instance_per_network"]["limit"]["name"], net['network_name']) + metrics.write_data_to_metric( + config, project, usage / net['limit'], + metrics_dict["metrics_per_network"]["instance_per_network"] + ["utilization"]["name"], net['network_name']) + + print(f"Wrote number of instances to metric for projects/{project}") diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/limits.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/limits.py new file mode 100644 index 000000000..8b3d5ae97 --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/limits.py @@ -0,0 +1,171 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from google.api_core import exceptions +from google.cloud import monitoring_v3 +from . import metrics + + +def get_ppg(network_link, limit_dict): + ''' + Checks if this network has a specific limit for a metric, if so, returns that limit, if not, returns the default limit. + + Parameters: + network_link (string): VPC network link. + limit_list (list of string): Used to get the limit per VPC or the default limit. + Returns: + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + ''' + if network_link in limit_dict: + return limit_dict[network_link] + else: + if 'default_value' in limit_dict: + return limit_dict['default_value'] + else: + print(f"Error: limit not found for {network_link}") + return 0 + + +def set_limits(network_dict, quota_limit, limit_dict): + ''' + Updates the network dictionary with quota limit values. + + Parameters: + network_dict (dictionary of string: string): Contains network information. + quota_limit (list of dictionaries of string: string): Current quota limit. + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + None + ''' + + network_dict['limit'] = None + + if quota_limit: + for net in quota_limit: + if net['network_id'] == network_dict['network_id']: + network_dict['limit'] = net['value'] + return + + network_link = f"https://www.googleapis.com/compute/v1/projects/{network_dict['project_id']}/global/networks/{network_dict['network_name']}" + + if network_link in limit_dict: + network_dict['limit'] = limit_dict[network_link] + else: + if 'default_value' in limit_dict: + network_dict['limit'] = limit_dict['default_value'] + else: + print(f"Error: Couldn't find limit for {network_link}") + network_dict['limit'] = 0 + + +def get_quota_current_limit(config, project_link, metric_name): + ''' + Retrieves limit for a specific metric. + + Parameters: + project_link (string): Project link. + metric_name (string): Name of the metric. + Returns: + results_list (list of string): Current limit. + ''' + + try: + results = config["clients"]["monitoring_client"].list_time_series( + request={ + "name": project_link, + "filter": f'metric.type = "{metric_name}"', + "interval": config["monitoring_interval"], + "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL + }) + results_list = list(results) + return results_list + except exceptions.PermissionDenied as err: + print( + f"Warning: error reading quotas for {project_link}. " + + f"This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" + ) + return None + + +def count_effective_limit(config, project_id, network_dict, usage_metric_name, + limit_metric_name, utilization_metric_name, + limit_dict): + ''' + Calculates the effective limits (using algorithm in the link below) for peering groups and writes data (usage, limit, utilization) to the custom metrics. + Source: https://cloud.google.com/vpc/docs/quota#vpc-peering-effective-limit + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): Project ID for the project to be analyzed. + network_dict (dictionary of string: string): Contains all required information about the network to get the usage, limit and utilization. + usage_metric_name (string): Name of the custom metric to be populated for usage per VPC peering group. + limit_metric_name (string): Name of the custom metric to be populated for limit per VPC peering group. + utilization_metric_name (string): Name of the custom metric to be populated for utilization per VPC peering group. + limit_dict (dictionary of string:int): Dictionary containing the limit per peering group (either VPC specific or default limit). + Returns: + None + ''' + + if network_dict['peerings'] == []: + return + + # Get usage: Sums usage for current network + all peered networks + peering_group_usage = network_dict['usage'] + for peered_network in network_dict['peerings']: + if 'usage' not in peered_network: + print( + f"Can not add metrics for peered network in projects/{project_id} as no usage metrics exist due to missing permissions" + ) + continue + peering_group_usage += peered_network['usage'] + + network_link = f"https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network_dict['network_name']}" + + # Calculates effective limit: Step 1: max(per network limit, per network_peering_group limit) + limit_step1 = max(network_dict['limit'], get_ppg(network_link, limit_dict)) + + # Calculates effective limit: Step 2: List of max(per network limit, per network_peering_group limit) for each peered network + limit_step2 = [] + for peered_network in network_dict['peerings']: + peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network['project_id']}/global/networks/{peered_network['network_name']}" + + if 'limit' in peered_network: + limit_step2.append( + max(peered_network['limit'], get_ppg(peered_network_link, + limit_dict))) + else: + print( + f"Ignoring projects/{peered_network['project_id']} for limits in peering group of project {project_id} as no limits are available." + + + "This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" + ) + + # Calculates effective limit: Step 3: Find minimum from the list created by Step 2 + limit_step3 = 0 + if len(limit_step2) > 0: + limit_step3 = min(limit_step2) + + # Calculates effective limit: Step 4: Find maximum from step 1 and step 3 + effective_limit = max(limit_step1, limit_step3) + utilization = peering_group_usage / effective_limit + + metrics.write_data_to_metric(config, project_id, peering_group_usage, + usage_metric_name, network_dict['network_name']) + metrics.write_data_to_metric(config, project_id, effective_limit, + limit_metric_name, network_dict['network_name']) + metrics.write_data_to_metric(config, project_id, utilization, + utilization_metric_name, + network_dict['network_name']) diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/metrics.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/metrics.py new file mode 100644 index 000000000..14183f157 --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/metrics.py @@ -0,0 +1,238 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import time +import yaml +from google.api import metric_pb2 as ga_metric +from google.cloud import monitoring_v3 +from . import peerings, limits, networks + + +def create_metrics(monitoring_project): + ''' + Creates all Cloud Monitoring custom metrics based on the metric.yaml file + + Parameters: + monitoring_project (string): the project where the metrics are written to + Returns: + metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions + limits_dict (dictionary of dictionary of string: int): limits_dict[metric_name]: dict[network_name] = limit_value + ''' + client = monitoring_v3.MetricServiceClient() + existing_metrics = [] + for desc in client.list_metric_descriptors(name=monitoring_project): + existing_metrics.append(desc.type) + limits_dict = {} + + with open("metrics.yaml", 'r') as stream: + try: + metrics_dict = yaml.safe_load(stream) + + for metric_list in metrics_dict.values(): + for metric in metric_list.values(): + for sub_metric_key, sub_metric in metric.items(): + metric_link = f"custom.googleapis.com/{sub_metric['name']}" + # If the metric doesn't exist yet, then we create it + if metric_link not in existing_metrics: + create_metric(sub_metric["name"], sub_metric["description"], + monitoring_project) + # Parse limits (both default values and network specific ones) + if sub_metric_key == "limit": + limits_dict_for_metric = {} + for network_link, limit_value in sub_metric["values"].items(): + limits_dict_for_metric[network_link] = limit_value + limits_dict[sub_metric["name"]] = limits_dict_for_metric + + return metrics_dict, limits_dict + except yaml.YAMLError as exc: + print(exc) + + +def create_metric(metric_name, description, monitoring_project): + ''' + Creates a Cloud Monitoring metric based on the parameter given if the metric is not already existing + + Parameters: + metric_name (string): Name of the metric to be created + description (string): Description of the metric to be created + monitoring_project (string): the project where the metrics are written to + Returns: + None + ''' + client = monitoring_v3.MetricServiceClient() + + descriptor = ga_metric.MetricDescriptor() + descriptor.type = f"custom.googleapis.com/{metric_name}" + descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE + descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE + descriptor.description = description + descriptor = client.create_metric_descriptor(name=monitoring_project, + metric_descriptor=descriptor) + print("Created {}.".format(descriptor.name)) + + +def write_data_to_metric(config, monitored_project_id, value, metric_name, + network_name): + ''' + Writes data to Cloud Monitoring custom metrics. + + Parameters: + config (dict): The dict containing config like clients and limits + monitored_project_id: ID of the project where the resource lives (will be added as a label) + value (int): Value for the data point of the metric. + metric_name (string): Name of the metric + network_name (string): Name of the network (will be added as a label) + Returns: + usage (int): Current usage for that network. + limit (int): Current usage for that network. + ''' + client = monitoring_v3.MetricServiceClient() + + series = monitoring_v3.TimeSeries() + series.metric.type = f"custom.googleapis.com/{metric_name}" + series.resource.type = "global" + series.metric.labels["network_name"] = network_name + series.metric.labels["project"] = monitored_project_id + + now = time.time() + seconds = int(now) + nanos = int((now - seconds) * 10**9) + interval = monitoring_v3.TimeInterval( + {"end_time": { + "seconds": seconds, + "nanos": nanos + }}) + point = monitoring_v3.Point({ + "interval": interval, + "value": { + "double_value": value + } + }) + series.points = [point] + + # TODO: sometimes this cashes with 'DeadlineExceeded: 504 Deadline expired before operation could complete' error + # Implement exponential backoff retries? + try: + client.create_time_series(name=config["monitoring_project_link"], + time_series=[series]) + except Exception as e: + print(e) + + +def get_pgg_data(config, metric_dict, usage_dict, limit_metric, limit_dict): + ''' + This function gets the usage, limit and utilization per VPC peering group for a specific metric for all projects to be monitored. + + Parameters: + config (dict): The dict containing config like clients and limits + metric_dict (dictionary of string: string): Dictionary with the metric names and description, that will be used to populate the metrics + usage_dict (dictionnary of string:int): Dictionary with the network link as key and the number of resources as value + limit_metric (string): Name of the existing GCP metric for limit per VPC network + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + None + ''' + for project in config["monitored_projects"]: + network_dict_list = peerings.gather_peering_data(config, project) + # Network dict list is a list of dictionary (one for each network) + # For each network, this dictionary contains: + # project_id, network_name, network_id, usage, limit, peerings (list of peered networks) + # peerings is a list of dictionary (one for each peered network) and contains: + # project_id, network_name, network_id + current_quota_limit = limits.get_quota_current_limit( + config, f"projects/{project}", limit_metric) + if current_quota_limit is None: + print( + f"Could not write number of L7 forwarding rules to metric for projects/{project} due to missing quotas" + ) + continue + + current_quota_limit_view = customize_quota_view(current_quota_limit) + + # For each network in this GCP project + for network_dict in network_dict_list: + if network_dict['network_id'] == 0: + print( + f"Could not write {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project} due to missing permissions." + ) + continue + network_link = f"https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network_dict['network_name']}" + + limit = networks.get_limit_network(network_dict, network_link, + current_quota_limit_view, limit_dict) + + usage = 0 + if network_link in usage_dict: + usage = usage_dict[network_link] + + # Here we add usage and limit to the network dictionary + network_dict["usage"] = usage + network_dict["limit"] = limit + + # For every peered network, get usage and limits + for peered_network_dict in network_dict['peerings']: + peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network_dict['project_id']}/global/networks/{peered_network_dict['network_name']}" + peered_usage = 0 + if peered_network_link in usage_dict: + peered_usage = usage_dict[peered_network_link] + + current_peered_quota_limit = limits.get_quota_current_limit( + config, f"projects/{peered_network_dict['project_id']}", + limit_metric) + if current_peered_quota_limit is None: + print( + f"Could not write metrics for peering to projects/{peered_network_dict['project_id']} due to missing quotas" + ) + continue + + peering_project_limit = customize_quota_view(current_peered_quota_limit) + + peered_limit = networks.get_limit_network(peered_network_dict, + peered_network_link, + peering_project_limit, + limit_dict) + # Here we add usage and limit to the peered network dictionary + peered_network_dict["usage"] = peered_usage + peered_network_dict["limit"] = peered_limit + + limits.count_effective_limit(config, project, network_dict, + metric_dict["usage"]["name"], + metric_dict["limit"]["name"], + metric_dict["utilization"]["name"], + limit_dict) + print( + f"Wrote {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project}" + ) + + +def customize_quota_view(quota_results): + ''' + Customize the quota output for an easier parsable output. + + Parameters: + quota_results (string): Input from get_quota_current_usage or get_quota_current_limit. Contains the Current usage or limit for all networks in that project. + Returns: + quotaViewList (list of dictionaries of string: string): Current quota usage or limit. + ''' + quotaViewList = [] + for result in quota_results: + quotaViewJson = {} + quotaViewJson.update(dict(result.resource.labels)) + quotaViewJson.update(dict(result.metric.labels)) + for val in result.points: + quotaViewJson.update({'value': val.value.int64_value}) + quotaViewList.append(quotaViewJson) + return quotaViewList diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/networks.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/networks.py new file mode 100644 index 000000000..6caeff173 --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/networks.py @@ -0,0 +1,159 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from code import interact +from collections import defaultdict +from google.protobuf import field_mask_pb2 +from googleapiclient import errors +import http + + +def get_subnet_ranges_dict(config: dict): + ''' + Calls the Asset Inventory API to get all Subnet ranges under the GCP organization. + + Parameters: + config (dict): The dict containing config like clients and limits + Returns: + subnet_range_dict (dictionary of string: int): Keys are the network links and values are the number of subnet ranges per network. + ''' + + subnet_range_dict = defaultdict(int) + read_mask = field_mask_pb2.FieldMask() + read_mask.FromJsonString('name,versionedResources') + + response = config["clients"]["asset_client"].search_all_resources( + request={ + "scope": f"organizations/{config['organization']}", + "asset_types": ["compute.googleapis.com/Subnetwork"], + "read_mask": read_mask, + }) + for resource in response: + ranges = 0 + network_link = None + + for versioned in resource.versioned_resources: + for field_name, field_value in versioned.resource.items(): + if field_name == "network": + network_link = field_value + ranges += 1 + if field_name == "secondaryIpRanges": + for range in field_value: + ranges += 1 + + if network_link in subnet_range_dict: + subnet_range_dict[network_link] += ranges + else: + subnet_range_dict[network_link] = ranges + + return subnet_range_dict + + +def get_networks(config, project_id): + ''' + Returns a dictionary of all networks in a project. + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): Project ID for the project containing the networks. + Returns: + network_dict (dictionary of string: string): Contains the project_id, network_name(s) and network_id(s) + ''' + request = config["clients"]["discovery_client"].networks().list( + project=project_id) + response = request.execute() + network_dict = [] + if 'items' in response: + for network in response['items']: + network_name = network['name'] + network_id = network['id'] + self_link = network['selfLink'] + d = { + 'project_id': project_id, + 'network_name': network_name, + 'network_id': network_id, + 'self_link': self_link + } + network_dict.append(d) + return network_dict + + +def get_network_id(config, project_id, network_name): + ''' + Returns the network_id for a specific project / network name. + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): Project ID for the project containing the networks. + network_name (string): Name of the network + Returns: + network_id (int): Network ID. + ''' + request = config["clients"]["discovery_client"].networks().list( + project=project_id) + try: + response = request.execute() + except errors.HttpError as err: + # TODO: log proper warning + if err.resp.status == http.HTTPStatus.FORBIDDEN: + print( + f"Warning: error reading networks for {project_id}. " + + f"This can happen if you don't have permissions on the project, for example if the project is in another organization or a Google managed project" + ) + else: + print(f"Warning: error reading networks for {project_id}: {err}") + return 0 + + network_id = 0 + + if 'items' in response: + for network in response['items']: + if network['name'] == network_name: + network_id = network['id'] + break + + if network_id == 0: + print(f"Error: network_id not found for {network_name} in {project_id}") + + return network_id + + +def get_limit_network(network_dict, network_link, quota_limit, limit_dict): + ''' + Returns limit for a specific network and metric, using the GCP quota metrics or the values in the yaml file if not found. + + Parameters: + network_dict (dictionary of string: string): Contains network information. + network_link (string): Contains network link + quota_limit (list of dictionaries of string: string): Current quota limit for all networks in that project. + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + limit (int): Current limit for that network. + ''' + if quota_limit: + for net in quota_limit: + if net['network_id'] == network_dict['network_id']: + return net['value'] + + if network_link in limit_dict: + return limit_dict[network_link] + else: + if 'default_value' in limit_dict: + return limit_dict['default_value'] + else: + print(f"Error: Couldn't find limit for {network_link}") + + return 0 diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/peerings.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/peerings.py new file mode 100644 index 000000000..141364d1f --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/peerings.py @@ -0,0 +1,164 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from . import metrics, networks, limits + + +def get_vpc_peering_data(config, metrics_dict, limit_dict): + ''' + Gets the data for VPC peerings (active or not) and writes it to the metric defined (vpc_peering_active_metric and vpc_peering_metric). + + Parameters: + config (dict): The dict containing config like clients and limits + metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + None + ''' + for project in config["monitored_projects"]: + active_vpc_peerings, vpc_peerings = gather_vpc_peerings_data( + config, project, limit_dict) + for peering in active_vpc_peerings: + metrics.write_data_to_metric( + config, project, peering['active_peerings'], + metrics_dict["metrics_per_network"]["vpc_peering_active_per_network"] + ["usage"]["name"], peering['network_name']) + metrics.write_data_to_metric( + config, project, peering['network_limit'], + metrics_dict["metrics_per_network"]["vpc_peering_active_per_network"] + ["limit"]["name"], peering['network_name']) + metrics.write_data_to_metric( + config, project, + peering['active_peerings'] / peering['network_limit'], + metrics_dict["metrics_per_network"]["vpc_peering_active_per_network"] + ["utilization"]["name"], peering['network_name']) + print("Wrote number of active VPC peerings to custom metric for project:", + project) + + for peering in vpc_peerings: + metrics.write_data_to_metric( + config, project, peering['peerings'], + metrics_dict["metrics_per_network"]["vpc_peering_per_network"] + ["usage"]["name"], peering['network_name']) + metrics.write_data_to_metric( + config, project, peering['network_limit'], + metrics_dict["metrics_per_network"]["vpc_peering_per_network"] + ["limit"]["name"], peering['network_name']) + metrics.write_data_to_metric( + config, project, peering['peerings'] / peering['network_limit'], + metrics_dict["metrics_per_network"]["vpc_peering_per_network"] + ["utilization"]["name"], peering['network_name']) + print("Wrote number of VPC peerings to custom metric for project:", project) + + +def gather_peering_data(config, project_id): + ''' + Returns a dictionary of all peerings for all networks in a project. + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): Project ID for the project containing the networks. + Returns: + network_list (dictionary of string: string): Contains the project_id, network_name(s) and network_id(s) of peered networks. + ''' + request = config["clients"]["discovery_client"].networks().list( + project=project_id) + response = request.execute() + + network_list = [] + if 'items' in response: + for network in response['items']: + net = { + 'project_id': project_id, + 'network_name': network['name'], + 'network_id': network['id'], + 'peerings': [] + } + if 'peerings' in network: + STATE = network['peerings'][0]['state'] + if STATE == "ACTIVE": + for peered_network in network[ + 'peerings']: # "projects/{project_name}/global/networks/{network_name}" + start = peered_network['network'].find("projects/") + len( + 'projects/') + end = peered_network['network'].find("/global") + peered_project = peered_network['network'][start:end] + peered_network_name = peered_network['network'].split( + "networks/")[1] + peered_net = { + 'project_id': + peered_project, + 'network_name': + peered_network_name, + 'network_id': + networks.get_network_id(config, peered_project, + peered_network_name) + } + net["peerings"].append(peered_net) + network_list.append(net) + return network_list + + +def gather_vpc_peerings_data(config, project_id, limit_dict): + ''' + Gets the data for all VPC peerings (active or not) in project_id and writes it to the metric defined in vpc_peering_active_metric and vpc_peering_metric. + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): We will take all VPCs in that project_id and look for all peerings to these VPCs. + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + active_peerings_dict (dictionary of string: string): Contains project_id, network_name, network_limit for each active VPC peering. + peerings_dict (dictionary of string: string): Contains project_id, network_name, network_limit for each VPC peering. + ''' + active_peerings_dict = [] + peerings_dict = [] + request = config["clients"]["discovery_client"].networks().list( + project=project_id) + response = request.execute() + if 'items' in response: + for network in response['items']: + if 'peerings' in network: + STATE = network['peerings'][0]['state'] + if STATE == "ACTIVE": + active_peerings_count = len(network['peerings']) + else: + active_peerings_count = 0 + + peerings_count = len(network['peerings']) + else: + peerings_count = 0 + active_peerings_count = 0 + + network_link = f"https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network['name']}" + network_limit = limits.get_ppg(network_link, limit_dict) + + active_d = { + 'project_id': project_id, + 'network_name': network['name'], + 'active_peerings': active_peerings_count, + 'network_limit': network_limit + } + active_peerings_dict.append(active_d) + d = { + 'project_id': project_id, + 'network_name': network['name'], + 'peerings': peerings_count, + 'network_limit': network_limit + } + peerings_dict.append(d) + + return active_peerings_dict, peerings_dict diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/routers.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/routers.py new file mode 100644 index 000000000..d20a76c4b --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/routers.py @@ -0,0 +1,56 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from google.protobuf import field_mask_pb2 + + +def get_routers(config): + ''' + Returns a dictionary of all Cloud Routers in the GCP organization. + + Parameters: + config (dict): The dict containing config like clients and limits + Returns: + routers_dict (dictionary of string: list of string): Key is the network link and value is a list of router links. + ''' + + read_mask = field_mask_pb2.FieldMask() + read_mask.FromJsonString('name,versionedResources') + + routers_dict = {} + + response = config["clients"]["asset_client"].search_all_resources( + request={ + "scope": f"organizations/{config['organization']}", + "asset_types": ["compute.googleapis.com/Router"], + "read_mask": read_mask, + }) + for resource in response: + network_link = None + router_link = None + for versioned in resource.versioned_resources: + for field_name, field_value in versioned.resource.items(): + if field_name == "network": + network_link = field_value + if field_name == "selfLink": + router_link = field_value + + if network_link in routers_dict: + routers_dict[network_link].append(router_link) + else: + routers_dict[network_link] = [router_link] + + return routers_dict diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics/routes.py b/examples/cloud-operations/network-dashboard/cloud-function/metrics/routes.py new file mode 100644 index 000000000..fbe9ff3be --- /dev/null +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics/routes.py @@ -0,0 +1,176 @@ +# +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from collections import defaultdict +from . import metrics, networks, limits, peerings, routers + + +def get_routes_for_router(config, project_id, router_region, router_name): + ''' + Returns the same of dynamic routes learned by a specific Cloud Router instance + + Parameters: + config (dict): The dict containing config like clients and limits + project_id (string): Project ID for the project containing the Cloud Router. + router_region (string): GCP region for the Cloud Router. + router_name (string): Cloud Router name. + Returns: + sum_routes (int): Number of dynamic routes learned by the Cloud Router. + ''' + request = config["clients"]["discovery_client"].routers().getRouterStatus( + project=project_id, region=router_region, router=router_name) + response = request.execute() + + sum_routes = 0 + + if 'result' in response: + if 'bgpPeerStatus' in response['result']: + for peer in response['result']['bgpPeerStatus']: + sum_routes += peer['numLearnedRoutes'] + + return sum_routes + + +def get_routes_for_network(config, network_link, project_id, routers_dict): + ''' + Returns a the number of dynamic routes for a given network + + Parameters: + config (dict): The dict containing config like clients and limits + network_link (string): Network self link. + project_id (string): Project ID containing the network. + routers_dict (dictionary of string: list of string): Dictionary with key as network link and value as list of router links. + Returns: + sum_routes (int): Number of routes in that network. + ''' + sum_routes = 0 + + if network_link in routers_dict: + for router_link in routers_dict[network_link]: + # Router link is using the following format: + # 'https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME' + start = router_link.find("/regions/") + len("/regions/") + end = router_link.find("/routers/") + router_region = router_link[start:end] + router_name = router_link.split('/routers/')[1] + routes = get_routes_for_router(config, project_id, router_region, + router_name) + + sum_routes += routes + + return sum_routes + + +def get_dynamic_routes(config, metrics_dict, limits_dict): + ''' + Writes all dynamic routes per VPC to custom metrics. + + Parameters: + config (dict): The dict containing config like clients and limits + metrics_dict (dictionary of dictionary of string: string): metrics names and descriptions. + limits_dict (dictionary of string: int): key is network link (or 'default_value') and value is the limit for that network + Returns: + dynamic_routes_dict (dictionary of string: int): key is network link and value is the number of dynamic routes for that network + ''' + routers_dict = routers.get_routers(config) + dynamic_routes_dict = defaultdict(int) + + for project_id in config["monitored_projects"]: + network_dict = networks.get_networks(config, project_id) + + for network in network_dict: + sum_routes = get_routes_for_network(config, network['self_link'], + project_id, routers_dict) + dynamic_routes_dict[network['self_link']] = sum_routes + + if network['self_link'] in limits_dict: + limit = limits_dict[network['self_link']] + else: + if 'default_value' in limits_dict: + limit = limits_dict['default_value'] + else: + print("Error: couldn't find limit for dynamic routes.") + break + + utilization = sum_routes / limit + + metrics.write_data_to_metric( + config, project_id, sum_routes, metrics_dict["metrics_per_network"] + ["dynamic_routes_per_network"]["usage"]["name"], + network['network_name']) + metrics.write_data_to_metric( + config, project_id, limit, metrics_dict["metrics_per_network"] + ["dynamic_routes_per_network"]["limit"]["name"], + network['network_name']) + metrics.write_data_to_metric( + config, project_id, utilization, metrics_dict["metrics_per_network"] + ["dynamic_routes_per_network"]["utilization"]["name"], + network['network_name']) + + print("Wrote metrics for dynamic routes for VPCs in project", project_id) + + return dynamic_routes_dict + + +def get_dynamic_routes_ppg(config, metric_dict, usage_dict, limit_dict): + ''' + This function gets the usage, limit and utilization for the dynamic routes per VPC peering group. + + Parameters: + config (dict): The dict containing config like clients and limits + metric_dict (dictionary of string: string): Dictionary with the metric names and description, that will be used to populate the metrics + usage_dict (dictionnary of string:int): Dictionary with the network link as key and the number of resources as value + limit_dict (dictionary of string:int): Dictionary with the network link as key and the limit as value + Returns: + None + ''' + for project in config["monitored_projects"]: + network_dict_list = peerings.gather_peering_data(config, project) + + for network_dict in network_dict_list: + network_link = f"https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network_dict['network_name']}" + + limit = limits.get_ppg(network_link, limit_dict) + + usage = 0 + if network_link in usage_dict: + usage = usage_dict[network_link] + + # Here we add usage and limit to the network dictionary + network_dict["usage"] = usage + network_dict["limit"] = limit + + # For every peered network, get usage and limits + for peered_network_dict in network_dict['peerings']: + peered_network_link = f"https://www.googleapis.com/compute/v1/projects/{peered_network_dict['project_id']}/global/networks/{peered_network_dict['network_name']}" + peered_usage = 0 + if peered_network_link in usage_dict: + peered_usage = usage_dict[peered_network_link] + + peered_limit = limits.get_ppg(peered_network_link, limit_dict) + + # Here we add usage and limit to the peered network dictionary + peered_network_dict["usage"] = peered_usage + peered_network_dict["limit"] = peered_limit + + limits.count_effective_limit(config, project, network_dict, + metric_dict["usage"]["name"], + metric_dict["limit"]["name"], + metric_dict["utilization"]["name"], + limit_dict) + print( + f"Wrote {metric_dict['usage']['name']} for peering group {network_dict['network_name']} in {project}" + ) From 4cb814a0aec9690fa0dab9932737cc001a0c852f Mon Sep 17 00:00:00 2001 From: next-davidduquehernandez Date: Sat, 30 Apr 2022 10:32:49 +0200 Subject: [PATCH 06/12] Added 'gke_backup_agent_config' option to addons in gke-cluster (#642) * Added 'gke_backup_agent_config' option to addons in gke-cluster * Update README.md after launch tfdoc.py --- modules/gke-cluster/README.md | 76 ++++++++++++++++---------------- modules/gke-cluster/main.tf | 3 ++ modules/gke-cluster/variables.tf | 2 + 3 files changed, 43 insertions(+), 38 deletions(-) diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index 4617cae07..33fb2ffd1 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -68,44 +68,44 @@ module "cluster-1" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [location](variables.tf#L159) | Cluster zone or region. | string | ✓ | | -| [name](variables.tf#L226) | Cluster name. | string | ✓ | | -| [network](variables.tf#L231) | Name or self link of the VPC used for the cluster. Use the self link for Shared VPC. | string | ✓ | | -| [project_id](variables.tf#L275) | Cluster project id. | string | ✓ | | -| [secondary_range_pods](variables.tf#L298) | Subnet secondary range name used for pods. | string | ✓ | | -| [secondary_range_services](variables.tf#L303) | Subnet secondary range name used for services. | string | ✓ | | -| [subnetwork](variables.tf#L308) | VPC subnetwork name or self link. | string | ✓ | | -| [addons](variables.tf#L17) | Addons enabled in the cluster (true means enabled). | object({…}) | | {…} | -| [authenticator_security_group](variables.tf#L51) | RBAC security group for Google Groups for GKE, format is gke-security-groups@yourdomain.com. | string | | null | -| [cluster_autoscaling](variables.tf#L57) | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({…}) | | {…} | -| [database_encryption](variables.tf#L75) | Enable and configure GKE application-layer secrets encryption. | object({…}) | | {…} | -| [default_max_pods_per_node](variables.tf#L89) | Maximum number of pods per node in this cluster. | number | | 110 | -| [description](variables.tf#L95) | Cluster description. | string | | null | -| [dns_config](variables.tf#L101) | Configuration for Using Cloud DNS for GKE. | object({…}) | | null | -| [enable_autopilot](variables.tf#L111) | Create cluster in autopilot mode. With autopilot there's no need to create node-pools and some features are not supported (e.g. setting default_max_pods_per_node). | bool | | false | -| [enable_binary_authorization](variables.tf#L117) | Enable Google Binary Authorization. | bool | | null | -| [enable_dataplane_v2](variables.tf#L123) | Enable Dataplane V2 on the cluster, will disable network_policy addons config. | bool | | false | -| [enable_intranode_visibility](variables.tf#L129) | Enable intra-node visibility to make same node pod to pod traffic visible. | bool | | null | -| [enable_l4_ilb_subsetting](variables.tf#L135) | Enable L4ILB Subsetting. | bool | | null | -| [enable_shielded_nodes](variables.tf#L141) | Enable Shielded Nodes features on all nodes in this cluster. | bool | | null | -| [enable_tpu](variables.tf#L147) | Enable Cloud TPU resources in this cluster. | bool | | null | -| [labels](variables.tf#L153) | Cluster resource labels. | map(string) | | null | -| [logging_config](variables.tf#L164) | Logging configuration (enabled components). | list(string) | | null | -| [logging_service](variables.tf#L170) | Logging service (disable with an empty string). | string | | "logging.googleapis.com/kubernetes" | -| [maintenance_config](variables.tf#L176) | Maintenance window configuration. | object({…}) | | {…} | -| [master_authorized_ranges](variables.tf#L202) | External Ip address ranges that can access the Kubernetes cluster master through HTTPS. | map(string) | | {} | -| [min_master_version](variables.tf#L208) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | -| [monitoring_config](variables.tf#L214) | Monitoring configuration (enabled components). | list(string) | | null | -| [monitoring_service](variables.tf#L220) | Monitoring service (disable with an empty string). | string | | "monitoring.googleapis.com/kubernetes" | -| [node_locations](variables.tf#L236) | Zones in which the cluster's nodes are located. | list(string) | | [] | -| [notification_config](variables.tf#L242) | GKE Cluster upgrade notifications via PubSub. | bool | | false | -| [peering_config](variables.tf#L248) | Configure peering with the master VPC for private clusters. | object({…}) | | null | -| [pod_security_policy](variables.tf#L258) | Enable the PodSecurityPolicy feature. | bool | | null | -| [private_cluster_config](variables.tf#L264) | Enable and configure private cluster, private nodes must be true if used. | object({…}) | | null | -| [release_channel](variables.tf#L280) | Release channel for GKE upgrades. | string | | null | -| [resource_usage_export_config](variables.tf#L286) | Configure the ResourceUsageExportConfig feature. | object({…}) | | {…} | -| [vertical_pod_autoscaling](variables.tf#L313) | Enable the Vertical Pod Autoscaling feature. | bool | | null | -| [workload_identity](variables.tf#L319) | Enable the Workload Identity feature. | bool | | true | +| [location](variables.tf#L161) | Cluster zone or region. | string | ✓ | | +| [name](variables.tf#L228) | Cluster name. | string | ✓ | | +| [network](variables.tf#L233) | Name or self link of the VPC used for the cluster. Use the self link for Shared VPC. | string | ✓ | | +| [project_id](variables.tf#L277) | Cluster project id. | string | ✓ | | +| [secondary_range_pods](variables.tf#L300) | Subnet secondary range name used for pods. | string | ✓ | | +| [secondary_range_services](variables.tf#L305) | Subnet secondary range name used for services. | string | ✓ | | +| [subnetwork](variables.tf#L310) | VPC subnetwork name or self link. | string | ✓ | | +| [addons](variables.tf#L17) | Addons enabled in the cluster (true means enabled). | object({…}) | | {…} | +| [authenticator_security_group](variables.tf#L53) | RBAC security group for Google Groups for GKE, format is gke-security-groups@yourdomain.com. | string | | null | +| [cluster_autoscaling](variables.tf#L59) | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({…}) | | {…} | +| [database_encryption](variables.tf#L77) | Enable and configure GKE application-layer secrets encryption. | object({…}) | | {…} | +| [default_max_pods_per_node](variables.tf#L91) | Maximum number of pods per node in this cluster. | number | | 110 | +| [description](variables.tf#L97) | Cluster description. | string | | null | +| [dns_config](variables.tf#L103) | Configuration for Using Cloud DNS for GKE. | object({…}) | | null | +| [enable_autopilot](variables.tf#L113) | Create cluster in autopilot mode. With autopilot there's no need to create node-pools and some features are not supported (e.g. setting default_max_pods_per_node). | bool | | false | +| [enable_binary_authorization](variables.tf#L119) | Enable Google Binary Authorization. | bool | | null | +| [enable_dataplane_v2](variables.tf#L125) | Enable Dataplane V2 on the cluster, will disable network_policy addons config. | bool | | false | +| [enable_intranode_visibility](variables.tf#L131) | Enable intra-node visibility to make same node pod to pod traffic visible. | bool | | null | +| [enable_l4_ilb_subsetting](variables.tf#L137) | Enable L4ILB Subsetting. | bool | | null | +| [enable_shielded_nodes](variables.tf#L143) | Enable Shielded Nodes features on all nodes in this cluster. | bool | | null | +| [enable_tpu](variables.tf#L149) | Enable Cloud TPU resources in this cluster. | bool | | null | +| [labels](variables.tf#L155) | Cluster resource labels. | map(string) | | null | +| [logging_config](variables.tf#L166) | Logging configuration (enabled components). | list(string) | | null | +| [logging_service](variables.tf#L172) | Logging service (disable with an empty string). | string | | "logging.googleapis.com/kubernetes" | +| [maintenance_config](variables.tf#L178) | Maintenance window configuration. | object({…}) | | {…} | +| [master_authorized_ranges](variables.tf#L204) | External Ip address ranges that can access the Kubernetes cluster master through HTTPS. | map(string) | | {} | +| [min_master_version](variables.tf#L210) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | +| [monitoring_config](variables.tf#L216) | Monitoring configuration (enabled components). | list(string) | | null | +| [monitoring_service](variables.tf#L222) | Monitoring service (disable with an empty string). | string | | "monitoring.googleapis.com/kubernetes" | +| [node_locations](variables.tf#L238) | Zones in which the cluster's nodes are located. | list(string) | | [] | +| [notification_config](variables.tf#L244) | GKE Cluster upgrade notifications via PubSub. | bool | | false | +| [peering_config](variables.tf#L250) | Configure peering with the master VPC for private clusters. | object({…}) | | null | +| [pod_security_policy](variables.tf#L260) | Enable the PodSecurityPolicy feature. | bool | | null | +| [private_cluster_config](variables.tf#L266) | Enable and configure private cluster, private nodes must be true if used. | object({…}) | | null | +| [release_channel](variables.tf#L282) | Release channel for GKE upgrades. | string | | null | +| [resource_usage_export_config](variables.tf#L288) | Configure the ResourceUsageExportConfig feature. | object({…}) | | {…} | +| [vertical_pod_autoscaling](variables.tf#L315) | Enable the Vertical Pod Autoscaling feature. | bool | | null | +| [workload_identity](variables.tf#L321) | Enable the Workload Identity feature. | bool | | true | ## Outputs diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index f82279bf6..64762b674 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -96,6 +96,9 @@ resource "google_container_cluster" "cluster" { config_connector_config { enabled = var.addons.config_connector_config } + gke_backup_agent_config { + enabled = var.addons.gke_backup_agent_config + } } # TODO(ludomagno): support setting address ranges instead of range names diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index 487aff532..679390209 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -30,6 +30,7 @@ variable "addons" { gcp_filestore_csi_driver_config = bool config_connector_config = bool kalm_config = bool + gke_backup_agent_config = bool }) default = { cloudrun_config = false @@ -45,6 +46,7 @@ variable "addons" { gcp_filestore_csi_driver_config = false config_connector_config = false kalm_config = false + gke_backup_agent_config = false } } From 3a61eaf71aa9959392597cb181b7344296e99e26 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 30 Apr 2022 10:33:22 +0200 Subject: [PATCH 07/12] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa82c559b..72dcc4f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. - bump Google provider versions to `>= 4.17.0` - bump Terraform version to `>= 1.1.0` - add `shielded_instance_config` support for instance template on `compute-vm` module +- add support for `gke_backup_agent_config` to GKE module addons **FAST** From a1b66c2ba1012ec2701991762bb038f7cbc78c6a Mon Sep 17 00:00:00 2001 From: flaprimo Date: Sat, 30 Apr 2022 11:25:50 +0200 Subject: [PATCH 08/12] Add subscription filter support to PubSub module (#632) * add subscription filters to pubsub module * add tfdoc Co-authored-by: Ludovico Magnocavallo --- modules/pubsub/README.md | 21 +++++++++++---------- modules/pubsub/main.tf | 1 + modules/pubsub/variables.tf | 3 +++ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/modules/pubsub/README.md b/modules/pubsub/README.md index 411511abb..a321c662e 100644 --- a/modules/pubsub/README.md +++ b/modules/pubsub/README.md @@ -38,6 +38,7 @@ module "pubsub" { message_retention_duration = null retain_acked_messages = true expiration_policy_ttl = null + filter = null } } } @@ -93,17 +94,17 @@ module "pubsub" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [name](variables.tf#L60) | PubSub topic name. | string | ✓ | | -| [project_id](variables.tf#L65) | Project used for resources. | string | ✓ | | +| [name](variables.tf#L62) | PubSub topic name. | string | ✓ | | +| [project_id](variables.tf#L67) | Project used for resources. | string | ✓ | | | [dead_letter_configs](variables.tf#L17) | Per-subscription dead letter policy configuration. | map(object({…})) | | {} | -| [defaults](variables.tf#L26) | Subscription defaults for options. | object({…}) | | {…} | -| [iam](variables.tf#L42) | IAM bindings for topic in {ROLE => [MEMBERS]} format. | map(list(string)) | | {} | -| [kms_key](variables.tf#L48) | KMS customer managed encryption key. | string | | null | -| [labels](variables.tf#L54) | Labels. | map(string) | | {} | -| [push_configs](variables.tf#L70) | Push subscription configurations. | map(object({…})) | | {} | -| [regions](variables.tf#L83) | List of regions used to set persistence policy. | list(string) | | [] | -| [subscription_iam](variables.tf#L89) | IAM bindings for subscriptions in {SUBSCRIPTION => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {} | -| [subscriptions](variables.tf#L95) | Topic subscriptions. Also define push configs for push subscriptions. If options is set to null subscription defaults will be used. Labels default to topic labels if set to null. | map(object({…})) | | {} | +| [defaults](variables.tf#L26) | Subscription defaults for options. | object({…}) | | {…} | +| [iam](variables.tf#L44) | IAM bindings for topic in {ROLE => [MEMBERS]} format. | map(list(string)) | | {} | +| [kms_key](variables.tf#L50) | KMS customer managed encryption key. | string | | null | +| [labels](variables.tf#L56) | Labels. | map(string) | | {} | +| [push_configs](variables.tf#L72) | Push subscription configurations. | map(object({…})) | | {} | +| [regions](variables.tf#L85) | List of regions used to set persistence policy. | list(string) | | [] | +| [subscription_iam](variables.tf#L91) | IAM bindings for subscriptions in {SUBSCRIPTION => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {} | +| [subscriptions](variables.tf#L97) | Topic subscriptions. Also define push configs for push subscriptions. If options is set to null subscription defaults will be used. Labels default to topic labels if set to null. | map(object({…})) | | {} | ## Outputs diff --git a/modules/pubsub/main.tf b/modules/pubsub/main.tf index 545abbbd7..af08de389 100644 --- a/modules/pubsub/main.tf +++ b/modules/pubsub/main.tf @@ -66,6 +66,7 @@ resource "google_pubsub_subscription" "default" { ack_deadline_seconds = each.value.options.ack_deadline_seconds message_retention_duration = each.value.options.message_retention_duration retain_acked_messages = each.value.options.retain_acked_messages + filter = each.value.options.filter dynamic "expiration_policy" { for_each = each.value.options.expiration_policy_ttl == null ? [] : [""] diff --git a/modules/pubsub/variables.tf b/modules/pubsub/variables.tf index 78dd2fa62..592d80090 100644 --- a/modules/pubsub/variables.tf +++ b/modules/pubsub/variables.tf @@ -30,12 +30,14 @@ variable "defaults" { message_retention_duration = string retain_acked_messages = bool expiration_policy_ttl = string + filter = string }) default = { ack_deadline_seconds = null message_retention_duration = null retain_acked_messages = null expiration_policy_ttl = null + filter = null } } @@ -101,6 +103,7 @@ variable "subscriptions" { message_retention_duration = string retain_acked_messages = bool expiration_policy_ttl = string + filter = string }) })) default = {} From c2323fed41bcf4113de4ed7b1a7c373740faf741 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 30 Apr 2022 11:26:27 +0200 Subject: [PATCH 09/12] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72dcc4f66..b2d414a1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file. - bump Terraform version to `>= 1.1.0` - add `shielded_instance_config` support for instance template on `compute-vm` module - add support for `gke_backup_agent_config` to GKE module addons +- add support for subscription filters to PubSub module **FAST** From 4114f9995fb51e562da6fc4f817ae2c39b5d47d7 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 2 May 2022 09:01:05 +0200 Subject: [PATCH 10/12] Change hub and spoke VPN example to use VPN HA (#643) * missing outputs and diagram * fix names and outputs, update diagram * fix vm name in example * tfdoc files on * fix test * address comments --- .../networking/hub-and-spoke-vpn/README.md | 96 ++++-- .../networking/hub-and-spoke-vpn/diagram.png | Bin 199253 -> 92328 bytes examples/networking/hub-and-spoke-vpn/main.tf | 310 +++--------------- .../networking/hub-and-spoke-vpn/net-dev.tf | 69 ++++ .../hub-and-spoke-vpn/net-landing.tf | 59 ++++ .../networking/hub-and-spoke-vpn/net-prod.tf | 69 ++++ .../networking/hub-and-spoke-vpn/outputs.tf | 28 +- .../networking/hub-and-spoke-vpn/provider.tf | 18 - .../networking/hub-and-spoke-vpn/variables.tf | 91 ++--- .../hub-and-spoke-vpn/vpn-dev-r1.tf | 107 ++++++ .../hub-and-spoke-vpn/vpn-prod-r1.tf | 116 +++++++ .../hub_and_spoke_vpn/fixture/main.tf | 8 +- .../hub_and_spoke_vpn/fixture/variables.tf | 18 - .../networking/hub_and_spoke_vpn/test_plan.py | 5 +- 14 files changed, 624 insertions(+), 370 deletions(-) create mode 100644 examples/networking/hub-and-spoke-vpn/net-dev.tf create mode 100644 examples/networking/hub-and-spoke-vpn/net-landing.tf create mode 100644 examples/networking/hub-and-spoke-vpn/net-prod.tf delete mode 100644 examples/networking/hub-and-spoke-vpn/provider.tf create mode 100644 examples/networking/hub-and-spoke-vpn/vpn-dev-r1.tf create mode 100644 examples/networking/hub-and-spoke-vpn/vpn-prod-r1.tf delete mode 100644 tests/examples/networking/hub_and_spoke_vpn/fixture/variables.tf diff --git a/examples/networking/hub-and-spoke-vpn/README.md b/examples/networking/hub-and-spoke-vpn/README.md index f745b2a44..a6f797bc0 100644 --- a/examples/networking/hub-and-spoke-vpn/README.md +++ b/examples/networking/hub-and-spoke-vpn/README.md @@ -1,8 +1,15 @@ # Hub and Spoke via VPN -This example creates a simple **Hub and Spoke VPN** setup, where the VPC network connects satellite locations (spokes) through a single intermediary location (hub) via [IPsec VPN](https://cloud.google.com/vpn/docs/concepts/overview), optionally providing full-mesh networking via [custom route advertisements](https://cloud.google.com/router/docs/how-to/advertising-overview). +This example creates a simple **Hub and Spoke VPN** setup, where the VPC network connects satellite locations (spokes) through a single intermediary location (hub) via [IPsec HA VPN](https://cloud.google.com/network-connectivity/docs/vpn/concepts/overview#ha-vpn). -The example has been purposefully kept simple to show how to use and wire the VPC and VPN modules together, and so that it can be used as a basis for more complex scenarios. This is the high level diagram: +A few additional features are also shown: + +- [custom BGP advertisements](https://cloud.google.com/router/docs/how-to/advertising-overview) to implement transitivity between spokes +- [VPC Global Routing](https://cloud.google.com/network-connectivity/docs/router/how-to/configuring-routing-mode) to leverage a regional set of VPN gateways in different regions as next hops (used here for illustrative/study purpose, not usually done in real life) + +The example has been purposefully kept simple to show how to use and wire the VPC and VPN-HA modules together, and so that it can be used as a basis for experimentation. For a more complex scenario that better reflects real-life usage, including [Shared VPC](https://cloud.google.com/vpc/docs/shared-vpc) and [DNS cross-project binding](https://cloud.google.com/dns/docs/zones/cross-project-binding) please refer to the [FAST network stage](../../../fast/stages/02-networking-vpn/). + +This is the high level diagram of this example: ![High-level diagram](diagram.png "High-level diagram") @@ -12,44 +19,87 @@ This sample creates several distinct groups of resources: - one VPC for each hub and each spoke - one set of firewall rules for each VPC -- one VPN gateway, one tunnel and one Cloud Router for each spoke -- two VPN gateways, two tunnels and two Cloud Routers for the hub (one for each spoke) +- one HA VPN gateway with two tunnels and one Cloud Router for each spoke +- two HA VPN gateways with two tunnels and a shared Cloud Routers for the hub - one DNS private zone in the hub -- one DNS peering zone in each spoke -- one Cloud NAT configuration for each spoke -- one test instance for each spoke +- one DNS peering zone and one DNS private zone in each spoke +- one test instance for the hub each spoke -## Operational considerations +## Prerequisites -A single pre-existing project is used in this example to keep variables and complexity to a minimum, in a real world scenarios each spoke would probably use a separate project. The provided project needs a valid billing account and the Compute and DNS APIs enabled. You can easily create such a project with the [project module](../../../modules/project) or with the following commands: +A single pre-existing project is used in this example to keep variables and complexity to a minimum, in a real world scenarios each spoke would probably use a separate project. -``` shell -MY_PROJECT_ID="" -gcloud projects create $MY_PROJECT_ID -gcloud alpha billing projects link --billing-account=XXXXXX-XXXXXX-XXXXXX $MY_PROJECT_ID -gcloud services enable --project=$MY_PROJECT_ID {compute,dns}.googleapis.com +The provided project needs a valid billing account, the Compute and DNS APIs are enabled by the example. + +You can easily create such a project by commenting turning on project creation in the project module contained in `main.tf`, as shown in this snippet: + +```hcl +module "project" { + source = "../../..//modules/project" + name = var.project_id + # comment or remove this line to enable project creation + # project_create = false + # add the following line with your billing account id value + billing_account = "12345-ABCD-12345" + services = [ + "compute.googleapis.com", + "dns.googleapis.com" + ] + service_config = { + disable_on_destroy = false + disable_dependent_services = false + } +} ``` -The example does not account for HA, but the VPN gateways can be easily upgraded to use HA VPN via the [net-vpn-ha module](../../../modules/net-vpn-ha). +## Testing -If a single router and VPN gateway are used in the hub to manage all tunnels, particular care must be taken in announcing ranges from hub to spokes, as Cloud Router does not explicitly support transitivity and overlapping routes received from both sides create unintended side effects. The simple workaround is to announce a single aggregated route from hub to spokes so that it does not overlap with any of the ranges advertised by each spoke to the hub. +Once the example is up, you can quickly test features by logging in to one of the test VMs: + +```bash +gcloud compute ssh hs-ha-lnd-test-r1 +# test DNS resolution of the landing zone +ping test-r1.example.com +# test DNS resolution of the prod zone, and prod reachability +ping test-r1.prod.example.com +# test DNS resolution of the dev zone, and dev reachability via global routing +ping test-r2.dev.example.com +``` + + +## Files + +| name | description | modules | +|---|---|---| +| [main.tf](./main.tf) | Module-level locals and resources. | compute-vm · project | +| [net-dev.tf](./net-dev.tf) | Development spoke VPC. | dns · net-vpc · net-vpc-firewall | +| [net-landing.tf](./net-landing.tf) | Landing hub VPC. | dns · net-vpc · net-vpc-firewall | +| [net-prod.tf](./net-prod.tf) | Production spoke VPC. | dns · net-vpc · net-vpc-firewall | +| [outputs.tf](./outputs.tf) | Module outputs. | | +| [variables.tf](./variables.tf) | Module variables. | | +| [versions.tf](./versions.tf) | Version pins. | | +| [vpn-dev-r1.tf](./vpn-dev-r1.tf) | Landing to Development VPN for region 1. | net-vpn-ha | +| [vpn-prod-r1.tf](./vpn-prod-r1.tf) | Landing to Production VPN for region 1. | net-vpn-ha | + ## Variables | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [project_id](variables.tf#L56) | Project id for all resources. | string | ✓ | | -| [bgp_asn](variables.tf#L15) | BGP ASNs. | map(number) | | {…} | -| [bgp_custom_advertisements](variables.tf#L25) | BGP custom advertisement IP CIDR ranges. | map(string) | | {…} | -| [bgp_interface_ranges](variables.tf#L34) | BGP interface IP CIDR ranges. | map(string) | | {…} | -| [ip_ranges](variables.tf#L43) | IP CIDR ranges. | map(string) | | {…} | -| [regions](variables.tf#L61) | VPC regions. | map(string) | | {…} | +| [project_id](variables.tf#L49) | Project id for all resources. | string | ✓ | | +| [ip_ranges](variables.tf#L15) | Subnet IP CIDR ranges. | map(string) | | {…} | +| [ip_secondary_ranges](variables.tf#L28) | Subnet secondary ranges. | map(map(string)) | | {} | +| [prefix](variables.tf#L34) | Prefix used in resource names. | string | | null | +| [project_create_config](variables.tf#L40) | Populate with billing account id to trigger project creation. | object({…}) | | null | +| [regions](variables.tf#L54) | VPC regions. | map(string) | | {…} | +| [vpn_configs](variables.tf#L63) | VPN configurations. | map(object({…})) | | {…} | ## Outputs | name | description | sensitive | |---|---|:---:| -| [vms](outputs.tf#L15) | GCE VMs. | | +| [subnets](outputs.tf#L15) | Subnet details. | | +| [vms](outputs.tf#L39) | GCE VMs. | | diff --git a/examples/networking/hub-and-spoke-vpn/diagram.png b/examples/networking/hub-and-spoke-vpn/diagram.png index 6d5dc5ff25e5bf95022492714d49697a73eb40ca..6bddab62e539af0e9a230b2e5d167e97eadc6a8a 100644 GIT binary patch literal 92328 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

+5RWu3`zKivqxLXZR{3) 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%0A%J@NY8K#{ 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 S7)1p9sjFz+ExThC@xK5^yayBj literal 199253 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

T>?2WiU%+a+`=agGfjas0hlJ~ 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 diff --git a/examples/networking/hub-and-spoke-vpn/main.tf b/examples/networking/hub-and-spoke-vpn/main.tf index 3eec0ae6e..f448ca798 100644 --- a/examples/networking/hub-and-spoke-vpn/main.tf +++ b/examples/networking/hub-and-spoke-vpn/main.tf @@ -13,297 +13,71 @@ # limitations under the License. locals { - vm-startup-script = join("\n", [ - "#! /bin/bash", - "apt-get update && apt-get install -y dnsutils" - ]) + prefix = var.prefix == null ? "" : "${var.prefix}-" } -################################################################################ -# Hub networking # -################################################################################ +# enable services in the project used -module "vpc-hub" { - source = "../../../modules/net-vpc" - project_id = var.project_id - name = "hub" - subnets = [ - { - ip_cidr_range = var.ip_ranges.hub-a - name = "hub-a" - region = var.regions.a - secondary_ip_range = {} - }, - { - ip_cidr_range = var.ip_ranges.hub-b - name = "hub-b" - region = var.regions.b - secondary_ip_range = {} - } +module "project" { + source = "../../..//modules/project" + name = var.project_id + parent = try(var.project_create_config.parent, null) + billing_account = try(var.project_create_config.billing_account_id, null) + project_create = try(var.project_create_config.billing_account_id, null) != null + services = [ + "compute.googleapis.com", + "dns.googleapis.com" ] -} - -module "vpc-hub-firewall" { - source = "../../../modules/net-vpc-firewall" - project_id = var.project_id - network = module.vpc-hub.name - admin_ranges = values(var.ip_ranges) -} - -module "vpn-hub-a" { - source = "../../../modules/net-vpn-dynamic" - project_id = var.project_id - region = var.regions.a - network = module.vpc-hub.name - name = "hub-a" - router_asn = var.bgp_asn.hub - tunnels = { - spoke-1 = { - bgp_peer = { - address = cidrhost(var.bgp_interface_ranges.spoke-1, 2) - asn = var.bgp_asn.spoke-1 - } - bgp_peer_options = { - advertise_groups = ["ALL_SUBNETS"] - advertise_ip_ranges = { - (var.bgp_custom_advertisements.hub-to-spoke-1) = "spoke-2" - } - advertise_mode = "CUSTOM" - route_priority = 1000 - } - bgp_session_range = "${cidrhost(var.bgp_interface_ranges.spoke-1, 1)}/30" - ike_version = 2 - peer_ip = module.vpn-spoke-1.address - router = null - shared_secret = "" - } + service_config = { + disable_on_destroy = false + disable_dependent_services = false } } -module "vpn-hub-b" { - source = "../../../modules/net-vpn-dynamic" - project_id = var.project_id - region = var.regions.b - network = module.vpc-hub.name - name = "hub-b" - router_asn = var.bgp_asn.hub - tunnels = { - spoke-2 = { - bgp_peer = { - address = cidrhost(var.bgp_interface_ranges.spoke-2, 2) - asn = var.bgp_asn.spoke-2 - } - bgp_peer_options = { - advertise_groups = ["ALL_SUBNETS"] - advertise_ip_ranges = { - (var.bgp_custom_advertisements.hub-to-spoke-2) = "spoke-1" - } - advertise_mode = "CUSTOM" - route_priority = 1000 - } - bgp_session_range = "${cidrhost(var.bgp_interface_ranges.spoke-2, 1)}/30" - ike_version = 2 - peer_ip = module.vpn-spoke-2.address - router = null - shared_secret = "" - } - } -} +# test VM in landing region 1 -################################################################################ -# Spoke 1 networking # -################################################################################ - -module "vpc-spoke-1" { - source = "../../../modules/net-vpc" - project_id = var.project_id - name = "spoke-1" - subnets = [ - { - ip_cidr_range = var.ip_ranges.spoke-1-a - name = "spoke-1-a" - region = var.regions.a - secondary_ip_range = {} - }, - { - ip_cidr_range = var.ip_ranges.spoke-1-b - name = "spoke-1-b" - region = var.regions.b - secondary_ip_range = {} - } - ] -} - -module "vpc-spoke-1-firewall" { - source = "../../../modules/net-vpc-firewall" - project_id = var.project_id - network = module.vpc-spoke-1.name - admin_ranges = values(var.ip_ranges) -} - -module "vpn-spoke-1" { - source = "../../../modules/net-vpn-dynamic" - project_id = var.project_id - region = var.regions.a - network = module.vpc-spoke-1.name - name = "spoke-1" - router_asn = var.bgp_asn.spoke-1 - tunnels = { - hub = { - bgp_peer = { - address = cidrhost(var.bgp_interface_ranges.spoke-1, 1) - asn = var.bgp_asn.hub - } - bgp_peer_options = null - bgp_session_range = "${cidrhost(var.bgp_interface_ranges.spoke-1, 2)}/30" - ike_version = 2 - peer_ip = module.vpn-hub-a.address - router = null - shared_secret = module.vpn-hub-a.random_secret - } - } -} - -module "nat-spoke-1" { - source = "../../../modules/net-cloudnat" - project_id = var.project_id - region = var.regions.a - name = "spoke-1" - router_create = false - router_name = module.vpn-spoke-1.router_name -} - -################################################################################ -# Spoke 2 networking # -################################################################################ - -module "vpc-spoke-2" { - source = "../../../modules/net-vpc" - project_id = var.project_id - name = "spoke-2" - subnets = [ - { - ip_cidr_range = var.ip_ranges.spoke-2-a - name = "spoke-2-a" - region = var.regions.a - secondary_ip_range = {} - }, - { - ip_cidr_range = var.ip_ranges.spoke-2-b - name = "spoke-2-b" - region = var.regions.b - secondary_ip_range = {} - } - ] -} - -module "vpc-spoke-2-firewall" { - source = "../../../modules/net-vpc-firewall" - project_id = var.project_id - network = module.vpc-spoke-2.name - admin_ranges = values(var.ip_ranges) -} - -module "vpn-spoke-2" { - source = "../../../modules/net-vpn-dynamic" - project_id = var.project_id - region = var.regions.a - network = module.vpc-spoke-2.name - name = "spoke-2" - router_asn = var.bgp_asn.spoke-2 - tunnels = { - hub = { - bgp_peer = { - address = cidrhost(var.bgp_interface_ranges.spoke-2, 1) - asn = var.bgp_asn.hub - } - bgp_peer_options = null - bgp_session_range = "${cidrhost(var.bgp_interface_ranges.spoke-2, 2)}/30" - ike_version = 2 - peer_ip = module.vpn-hub-b.address - router = null - shared_secret = module.vpn-hub-b.random_secret - } - } -} - -module "nat-spoke-2" { - source = "../../../modules/net-cloudnat" - project_id = var.project_id - region = var.regions.a - name = "spoke-2" - router_create = false - router_name = module.vpn-spoke-2.router_name -} - -################################################################################ -# Test VMs # -################################################################################ - -module "vm-spoke-1" { +module "landing-r1-vm" { source = "../../../modules/compute-vm" project_id = var.project_id - zone = "${var.regions.b}-b" - name = "spoke-1-test" + name = "${local.prefix}lnd-test-r1" + zone = "${var.regions.r1}-b" network_interfaces = [{ - network = module.vpc-spoke-1.self_link - subnetwork = module.vpc-spoke-1.subnet_self_links["${var.regions.b}/spoke-1-b"] + network = module.landing-vpc.self_link + subnetwork = module.landing-vpc.subnet_self_links["${var.regions.r1}/${local.prefix}lnd-0"] nat = false addresses = null }] - tags = ["ssh"] - metadata = { startup-script = local.vm-startup-script } + tags = ["ssh"] } -module "vm-spoke-2" { +# test VM in prod region 1 + +module "prod-r1-vm" { source = "../../../modules/compute-vm" project_id = var.project_id - zone = "${var.regions.b}-b" - name = "spoke-2-test" + name = "${local.prefix}prd-test-r1" + zone = "${var.regions.r1}-b" network_interfaces = [{ - network = module.vpc-spoke-2.self_link - subnetwork = module.vpc-spoke-2.subnet_self_links["${var.regions.b}/spoke-2-b"] + network = module.prod-vpc.self_link + subnetwork = module.prod-vpc.subnet_self_links["${var.regions.r1}/${local.prefix}prd-0"] nat = false addresses = null }] - tags = ["ssh"] - metadata = { startup-script = local.vm-startup-script } + tags = ["ssh"] } -################################################################################ -# DNS zones # -################################################################################ +# test VM in dev region 1 -module "dns-host" { - source = "../../../modules/dns" - project_id = var.project_id - type = "private" - name = "example" - domain = "example.com." - client_networks = [module.vpc-hub.self_link] - recordsets = { - "A localhost" = { ttl = 300, records = ["127.0.0.1"] } - "A spoke-1-test" = { ttl = 300, records = [module.vm-spoke-1.internal_ip] } - "A spoke-2-test" = { ttl = 300, records = [module.vm-spoke-2.internal_ip] } - } -} - -module "dns-spoke-1" { - source = "../../../modules/dns" - project_id = var.project_id - type = "peering" - name = "spoke-1" - domain = "example.com." - client_networks = [module.vpc-spoke-1.self_link] - peer_network = module.vpc-hub.self_link -} - -module "dns-spoke-2" { - source = "../../../modules/dns" - project_id = var.project_id - type = "peering" - name = "spoke-2" - domain = "example.com." - client_networks = [module.vpc-spoke-2.self_link] - peer_network = module.vpc-hub.self_link +module "dev-r2-vm" { + source = "../../../modules/compute-vm" + project_id = var.project_id + name = "${local.prefix}dev-test-r2" + zone = "${var.regions.r2}-b" + network_interfaces = [{ + network = module.dev-vpc.self_link + subnetwork = module.dev-vpc.subnet_self_links["${var.regions.r2}/${local.prefix}dev-0"] + nat = false + addresses = null + }] + tags = ["ssh"] } diff --git a/examples/networking/hub-and-spoke-vpn/net-dev.tf b/examples/networking/hub-and-spoke-vpn/net-dev.tf new file mode 100644 index 000000000..eedca0f75 --- /dev/null +++ b/examples/networking/hub-and-spoke-vpn/net-dev.tf @@ -0,0 +1,69 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Development spoke VPC. + +module "dev-vpc" { + source = "../../../modules/net-vpc" + project_id = var.project_id + name = "${local.prefix}dev" + subnets = [ + { + ip_cidr_range = var.ip_ranges.dev-0-r1 + name = "${local.prefix}dev-0" + region = var.regions.r1 + secondary_ip_range = try( + var.ip_secondary_ranges.dev-0-r1, {} + ) + }, + { + ip_cidr_range = var.ip_ranges.dev-0-r2 + name = "${local.prefix}dev-0" + region = var.regions.r2 + secondary_ip_range = try( + var.ip_secondary_ranges.dev-0-r2, {} + ) + } + ] +} + +module "dev-firewall" { + source = "../../../modules/net-vpc-firewall" + project_id = var.project_id + network = module.dev-vpc.name + admin_ranges = values(var.ip_ranges) +} + +module "dev-dns-peering" { + source = "../../../modules/dns" + project_id = var.project_id + type = "peering" + name = "${local.prefix}example-com-dev-peering" + domain = "example.com." + client_networks = [module.dev-vpc.self_link] + peer_network = module.landing-vpc.self_link +} + +module "dev-dns-zone" { + source = "../../../modules/dns" + project_id = var.project_id + type = "private" + name = "${local.prefix}dev-example-com" + domain = "dev.example.com." + client_networks = [module.landing-vpc.self_link] + recordsets = { + "A localhost" = { ttl = 300, records = ["127.0.0.1"] } + "A test-r2" = { ttl = 300, records = [module.dev-r2-vm.internal_ip] } + } +} diff --git a/examples/networking/hub-and-spoke-vpn/net-landing.tf b/examples/networking/hub-and-spoke-vpn/net-landing.tf new file mode 100644 index 000000000..baaea4bc6 --- /dev/null +++ b/examples/networking/hub-and-spoke-vpn/net-landing.tf @@ -0,0 +1,59 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Landing hub VPC. + +module "landing-vpc" { + source = "../../../modules/net-vpc" + project_id = var.project_id + name = "${local.prefix}lnd" + subnets = [ + { + ip_cidr_range = var.ip_ranges.land-0-r1 + name = "${local.prefix}lnd-0" + region = var.regions.r1 + secondary_ip_range = try( + var.ip_secondary_ranges.land-0-r1, {} + ) + }, + { + ip_cidr_range = var.ip_ranges.land-0-r2 + name = "${local.prefix}lnd-0" + region = var.regions.r2 + secondary_ip_range = try( + var.ip_secondary_ranges.land-0-r2, {} + ) + } + ] +} + +module "landing-firewall" { + source = "../../../modules/net-vpc-firewall" + project_id = var.project_id + network = module.landing-vpc.name + admin_ranges = values(var.ip_ranges) +} + +module "landing-dns-zone" { + source = "../../../modules/dns" + project_id = var.project_id + type = "private" + name = "${local.prefix}example-com" + domain = "example.com." + client_networks = [module.landing-vpc.self_link] + recordsets = { + "A localhost" = { ttl = 300, records = ["127.0.0.1"] } + "A test-r1" = { ttl = 300, records = [module.landing-r1-vm.internal_ip] } + } +} diff --git a/examples/networking/hub-and-spoke-vpn/net-prod.tf b/examples/networking/hub-and-spoke-vpn/net-prod.tf new file mode 100644 index 000000000..c058537d2 --- /dev/null +++ b/examples/networking/hub-and-spoke-vpn/net-prod.tf @@ -0,0 +1,69 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Production spoke VPC. + +module "prod-vpc" { + source = "../../../modules/net-vpc" + project_id = var.project_id + name = "${local.prefix}prd" + subnets = [ + { + ip_cidr_range = var.ip_ranges.prod-0-r1 + name = "${local.prefix}prd-0" + region = var.regions.r1 + secondary_ip_range = try( + var.ip_secondary_ranges.prod-0-r1, {} + ) + }, + { + ip_cidr_range = var.ip_ranges.prod-0-r2 + name = "${local.prefix}prd-0" + region = var.regions.r2 + secondary_ip_range = try( + var.ip_secondary_ranges.prod-0-r2, {} + ) + } + ] +} + +module "prod-firewall" { + source = "../../../modules/net-vpc-firewall" + project_id = var.project_id + network = module.prod-vpc.name + admin_ranges = values(var.ip_ranges) +} + +module "prod-dns-peering" { + source = "../../../modules/dns" + project_id = var.project_id + type = "peering" + name = "${local.prefix}example-com-prd-peering" + domain = "example.com." + client_networks = [module.prod-vpc.self_link] + peer_network = module.landing-vpc.self_link +} + +module "prod-dns-zone" { + source = "../../../modules/dns" + project_id = var.project_id + type = "private" + name = "${local.prefix}prd-example-com" + domain = "prd.example.com." + client_networks = [module.landing-vpc.self_link] + recordsets = { + "A localhost" = { ttl = 300, records = ["127.0.0.1"] } + "A test-r1" = { ttl = 300, records = [module.prod-r1-vm.internal_ip] } + } +} diff --git a/examples/networking/hub-and-spoke-vpn/outputs.tf b/examples/networking/hub-and-spoke-vpn/outputs.tf index f69ca1096..befd20ff8 100644 --- a/examples/networking/hub-and-spoke-vpn/outputs.tf +++ b/examples/networking/hub-and-spoke-vpn/outputs.tf @@ -12,10 +12,34 @@ # See the License for the specific language governing permissions and # limitations under the License. +output "subnets" { + description = "Subnet details." + value = { + dev = { + for k, v in module.dev-vpc.subnets : k => { + id = v.id + ip_cidr_range = v.ip_cidr_range + } + } + landing = { + for k, v in module.landing-vpc.subnets : k => { + id = v.id + ip_cidr_range = v.ip_cidr_range + } + } + prod = { + for k, v in module.prod-vpc.subnets : k => { + id = v.id + ip_cidr_range = v.ip_cidr_range + } + } + } +} + output "vms" { description = "GCE VMs." value = { - for instance in [module.vm-spoke-1.instance, module.vm-spoke-2.instance] : - instance.name => instance.network_interface.0.network_ip + for mod in [module.landing-r1-vm, module.dev-r2-vm, module.prod-r1-vm] : + mod.instance.name => mod.internal_ip } } diff --git a/examples/networking/hub-and-spoke-vpn/provider.tf b/examples/networking/hub-and-spoke-vpn/provider.tf deleted file mode 100644 index b36fb5ee5..000000000 --- a/examples/networking/hub-and-spoke-vpn/provider.tf +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -provider "google" { -} -provider "google-beta" { -} diff --git a/examples/networking/hub-and-spoke-vpn/variables.tf b/examples/networking/hub-and-spoke-vpn/variables.tf index f30bebc5a..98286e8ef 100644 --- a/examples/networking/hub-and-spoke-vpn/variables.tf +++ b/examples/networking/hub-and-spoke-vpn/variables.tf @@ -12,47 +12,40 @@ # See the License for the specific language governing permissions and # limitations under the License. -variable "bgp_asn" { - description = "BGP ASNs." - type = map(number) - default = { - hub = 64513 - spoke-1 = 64514 - spoke-2 = 64515 - } -} - -variable "bgp_custom_advertisements" { - description = "BGP custom advertisement IP CIDR ranges." - type = map(string) - default = { - hub-to-spoke-1 = "10.0.32.0/20" - hub-to-spoke-2 = "10.0.16.0/20" - } -} - -variable "bgp_interface_ranges" { - description = "BGP interface IP CIDR ranges." - type = map(string) - default = { - spoke-1 = "169.254.1.0/30" - spoke-2 = "169.254.1.4/30" - } -} - variable "ip_ranges" { - description = "IP CIDR ranges." + description = "Subnet IP CIDR ranges." type = map(string) default = { - hub-a = "10.0.0.0/24" - hub-b = "10.0.8.0/24" - spoke-1-a = "10.0.16.0/24" - spoke-1-b = "10.0.24.0/24" - spoke-2-a = "10.0.32.0/24" - spoke-2-b = "10.0.40.0/24" + land-0-r1 = "10.0.0.0/24" + land-0-r2 = "10.0.8.0/24" + dev-0-r1 = "10.0.16.0/24" + dev-0-r2 = "10.0.24.0/24" + prod-0-r1 = "10.0.32.0/24" + prod-0-r2 = "10.0.40.0/24" } } +variable "ip_secondary_ranges" { + description = "Subnet secondary ranges." + type = map(map(string)) + default = {} +} + +variable "prefix" { + description = "Prefix used in resource names." + type = string + default = null +} + +variable "project_create_config" { + description = "Populate with billing account id to trigger project creation." + type = object({ + billing_account_id = string + parent_id = string + }) + default = null +} + variable "project_id" { description = "Project id for all resources." type = string @@ -62,7 +55,31 @@ variable "regions" { description = "VPC regions." type = map(string) default = { - a = "europe-west1" - b = "europe-west2" + r1 = "europe-west1" + r2 = "europe-west4" + } +} + +variable "vpn_configs" { + description = "VPN configurations." + type = map(object({ + asn = number + custom_ranges = map(string) + })) + default = { + land-r1 = { + asn = 64513 + custom_ranges = { + "10.0.0.0/8" = "internal default" + } + } + dev-r1 = { + asn = 64514 + custom_ranges = null + } + prod-r1 = { + asn = 64515 + custom_ranges = null + } } } diff --git a/examples/networking/hub-and-spoke-vpn/vpn-dev-r1.tf b/examples/networking/hub-and-spoke-vpn/vpn-dev-r1.tf new file mode 100644 index 000000000..238475aad --- /dev/null +++ b/examples/networking/hub-and-spoke-vpn/vpn-dev-r1.tf @@ -0,0 +1,107 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Landing to Development VPN for region 1. + +module "landing-to-dev-vpn-r1" { + source = "../../../modules/net-vpn-ha" + project_id = var.project_id + network = module.landing-vpc.self_link + region = var.regions.r1 + name = "${local.prefix}lnd-to-dev-r1" + router_create = false + router_name = "${local.prefix}lnd-vpn-r1" + # router is created and managed by the production VPN module + # so we don't configure advertisements here + peer_gcp_gateway = module.dev-to-landing-vpn-r1.self_link + tunnels = { + 0 = { + bgp_peer = { + address = "169.254.2.2" + asn = var.vpn_configs.dev-r1.asn + } + # use this attribute to configure different advertisements for dev + bgp_peer_options = null + bgp_session_range = "169.254.2.1/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = null + vpn_gateway_interface = 0 + } + 1 = { + bgp_peer = { + address = "169.254.2.6" + asn = var.vpn_configs.dev-r1.asn + } + # use this attribute to configure different advertisements for dev + bgp_peer_options = null + bgp_session_range = "169.254.2.5/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = null + vpn_gateway_interface = 1 + } + } +} + +module "dev-to-landing-vpn-r1" { + source = "../../../modules/net-vpn-ha" + project_id = var.project_id + network = module.dev-vpc.self_link + region = var.regions.r1 + name = "${local.prefix}dev-to-lnd-r1" + router_create = true + router_name = "${local.prefix}dev-vpn-r1" + router_asn = var.vpn_configs.dev-r1.asn + router_advertise_config = ( + var.vpn_configs.dev-r1.custom_ranges == null + ? null + : { + groups = null + ip_ranges = coalesce(var.vpn_configs.dev-r1.custom_ranges, {}) + mode = "CUSTOM" + } + ) + peer_gcp_gateway = module.landing-to-dev-vpn-r1.self_link + tunnels = { + 0 = { + bgp_peer = { + address = "169.254.2.1" + asn = var.vpn_configs.land-r1.asn + } + bgp_peer_options = null + bgp_session_range = "169.254.2.2/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = module.landing-to-dev-vpn-r1.random_secret + vpn_gateway_interface = 0 + } + 1 = { + bgp_peer = { + address = "169.254.2.5" + asn = var.vpn_configs.land-r1.asn + } + bgp_peer_options = null + bgp_session_range = "169.254.2.6/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = module.landing-to-dev-vpn-r1.random_secret + vpn_gateway_interface = 1 + } + } +} diff --git a/examples/networking/hub-and-spoke-vpn/vpn-prod-r1.tf b/examples/networking/hub-and-spoke-vpn/vpn-prod-r1.tf new file mode 100644 index 000000000..1c2e7028c --- /dev/null +++ b/examples/networking/hub-and-spoke-vpn/vpn-prod-r1.tf @@ -0,0 +1,116 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Landing to Production VPN for region 1. + +module "landing-to-prod-vpn-r1" { + source = "../../../modules/net-vpn-ha" + project_id = var.project_id + network = module.landing-vpc.self_link + region = var.regions.r1 + name = "${local.prefix}lnd-to-prd-r1" + router_create = true + router_name = "${local.prefix}lnd-vpn-r1" + router_asn = var.vpn_configs.land-r1.asn + router_advertise_config = ( + var.vpn_configs.land-r1.custom_ranges == null + ? null + : { + groups = null + ip_ranges = coalesce(var.vpn_configs.land-r1.custom_ranges, {}) + mode = "CUSTOM" + } + ) + peer_gcp_gateway = module.prod-to-landing-vpn-r1.self_link + tunnels = { + 0 = { + bgp_peer = { + address = "169.254.0.2" + asn = var.vpn_configs.prod-r1.asn + } + bgp_peer_options = null + bgp_session_range = "169.254.0.1/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = null + vpn_gateway_interface = 0 + } + 1 = { + bgp_peer = { + address = "169.254.0.6" + asn = var.vpn_configs.prod-r1.asn + } + bgp_peer_options = null + bgp_session_range = "169.254.0.5/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = null + vpn_gateway_interface = 1 + } + } +} + +module "prod-to-landing-vpn-r1" { + source = "../../../modules/net-vpn-ha" + project_id = var.project_id + network = module.prod-vpc.self_link + region = var.regions.r1 + name = "${local.prefix}prd-to-lnd-r1" + router_create = true + router_name = "${local.prefix}prd-vpn-r1" + router_asn = var.vpn_configs.prod-r1.asn + # the router is managed here but shared with the dev VPN + router_advertise_config = ( + var.vpn_configs.prod-r1.custom_ranges == null + ? null + : { + groups = null + ip_ranges = coalesce(var.vpn_configs.prod-r1.custom_ranges, {}) + mode = "CUSTOM" + } + ) + peer_gcp_gateway = module.landing-to-prod-vpn-r1.self_link + tunnels = { + 0 = { + bgp_peer = { + address = "169.254.0.1" + asn = var.vpn_configs.land-r1.asn + } + # use this attribute to configure different advertisements for prod + bgp_peer_options = null + bgp_session_range = "169.254.0.2/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = module.landing-to-prod-vpn-r1.random_secret + vpn_gateway_interface = 0 + } + 1 = { + bgp_peer = { + address = "169.254.0.5" + asn = var.vpn_configs.land-r1.asn + } + # use this attribute to configure different advertisements for prod + bgp_peer_options = null + bgp_session_range = "169.254.0.6/30" + ike_version = 2 + peer_external_gateway_interface = null + router = null + shared_secret = module.landing-to-prod-vpn-r1.random_secret + vpn_gateway_interface = 1 + } + } +} diff --git a/tests/examples/networking/hub_and_spoke_vpn/fixture/main.tf b/tests/examples/networking/hub_and_spoke_vpn/fixture/main.tf index 5dc7d2aaf..006ad4c42 100644 --- a/tests/examples/networking/hub_and_spoke_vpn/fixture/main.tf +++ b/tests/examples/networking/hub_and_spoke_vpn/fixture/main.tf @@ -15,6 +15,10 @@ */ module "test" { - source = "../../../../../examples/networking/hub-and-spoke-vpn" - project_id = var.project_id + source = "../../../../../examples/networking/hub-and-spoke-vpn" + project_create_config = { + billing_account_id = "ABCDE-123456-ABCDE" + parent_id = null + } + project_id = "test-1" } diff --git a/tests/examples/networking/hub_and_spoke_vpn/fixture/variables.tf b/tests/examples/networking/hub_and_spoke_vpn/fixture/variables.tf deleted file mode 100644 index 626af0119..000000000 --- a/tests/examples/networking/hub_and_spoke_vpn/fixture/variables.tf +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -variable "project_id" { - type = string - default = "project-1" -} diff --git a/tests/examples/networking/hub_and_spoke_vpn/test_plan.py b/tests/examples/networking/hub_and_spoke_vpn/test_plan.py index 7d7716824..a24aaa596 100644 --- a/tests/examples/networking/hub_and_spoke_vpn/test_plan.py +++ b/tests/examples/networking/hub_and_spoke_vpn/test_plan.py @@ -12,8 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. + def test_resources(e2e_plan_runner): "Test that plan works and the numbers of resources is as expected." modules, resources = e2e_plan_runner() - assert len(modules) == 17 - assert len(resources) == 71 + assert len(modules) == 19 + assert len(resources) == 73 From 640963c2b82920297b708b076219e31daba36fa7 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 2 May 2022 09:01:40 +0200 Subject: [PATCH 11/12] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2d414a1c..272c238c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. - add `shielded_instance_config` support for instance template on `compute-vm` module - add support for `gke_backup_agent_config` to GKE module addons - add support for subscription filters to PubSub module +- update Hub and Spoke with VPN example **FAST** From e8e26f686665ff2f3e453d34311f7fdc0a56c72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Legrand?= Date: Tue, 3 May 2022 11:18:36 +0200 Subject: [PATCH 12/12] Update metrics.yaml (#641) Good news: Limits for L4 Internal Forwarding Rules was raised to 300 per network and per network peering group in GCP (source: https://cloud.google.com/vpc/docs/quota#vpc-peering). --- .../network-dashboard/cloud-function/metrics.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/cloud-operations/network-dashboard/cloud-function/metrics.yaml b/examples/cloud-operations/network-dashboard/cloud-function/metrics.yaml index c8f045cdc..2e5621d7f 100644 --- a/examples/cloud-operations/network-dashboard/cloud-function/metrics.yaml +++ b/examples/cloud-operations/network-dashboard/cloud-function/metrics.yaml @@ -60,7 +60,7 @@ metrics_per_network: name: internal_forwarding_rules_l4_limit description: Number of Internal Forwarding Rules for Internal L4 Load Balancers - limit. values: - default_value: 75 + default_value: 300 utilization: name: internal_forwarding_rules_l4_utilization description: Number of Internal Forwarding Rules for Internal L4 Load Balancers - utilization. @@ -97,7 +97,7 @@ metrics_per_peering_group: name: internal_forwarding_rules_l4_ppg_limit description: Number of Internal Forwarding Rules for Internal L4 Load Balancers per VPC peering group - effective limit. values: - default_value: 175 + default_value: 300 utilization: name: internal_forwarding_rules_l4_ppg_utilization description: Number of Internal Forwarding Rules for Internal L4 Load Balancers per VPC peering group - utilization. @@ -148,4 +148,4 @@ metrics_per_peering_group: default_value: 300 utilization: name: dynamic_routes_per_peering_group_utilization - description: Number of Dynamic routes per peering group - utilization. \ No newline at end of file + description: Number of Dynamic routes per peering group - utilization.